Changeset 66b628a in mainline


Ignore:
Timestamp:
2011-01-06T23:23:53Z (13 years ago)
Author:
martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7922dea
Parents:
e3fe7df
Message:

further code simplification

Location:
uspace/srv/hw/netif/dp8390
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hw/netif/dp8390/dp8390.c

    re3fe7df r66b628a  
    102102        /* This is the default, try to (re)locate the device. */
    103103        conf_hw(dep);
    104         if (dep->de_mode == DEM_DISABLED)
     104        if (!dep->up)
    105105                /* Probe failed, or the device is configured off. */
    106106                return EXDEV;
    107107       
    108         if (dep->de_mode == DEM_ENABLED)
     108        if (dep->up)
    109109                dp_init(dep);
    110110       
     
    112112}
    113113
    114 int do_init(dpeth_t *dep, int mode)
    115 {
    116         if (dep->de_mode == DEM_DISABLED)
     114/** Initialize and/or start the network interface.
     115 *
     116 *  @param[in,out] dep The network interface structure.
     117 *
     118 *  @return EOK on success.
     119 *  @return EXDEV if the network interface is disabled.
     120 *
     121 */
     122int do_init(dpeth_t *dep)
     123{
     124        if (!dep->up)
    117125                /* FIXME: Perhaps call do_probe()? */
    118126                return EXDEV;
    119127       
    120         assert(dep->de_mode == DEM_ENABLED);
    121         assert(dep->de_flags & DEF_ENABLED);
    122        
    123         dep->de_flags &= ~(DEF_PROMISC | DEF_MULTI | DEF_BROAD);
    124        
    125         if (mode &DL_PROMISC_REQ)
    126                 dep->de_flags |= DEF_PROMISC | DEF_MULTI | DEF_BROAD;
    127        
    128         if (mode &DL_MULTI_REQ)
    129                 dep->de_flags |= DEF_MULTI;
    130        
    131         if (mode &DL_BROAD_REQ)
    132                 dep->de_flags |= DEF_BROAD;
     128        assert(dep->up);
     129        assert(dep->enabled);
    133130       
    134131        dp_reinit(dep);
     
    138135void do_stop(dpeth_t *dep)
    139136{
    140         if ((dep->de_mode == DEM_ENABLED)
    141             && (dep->de_flags & DEF_ENABLED)) {
     137        if ((dep->up) && (dep->enabled)) {
    142138                outb_reg0(dep, DP_CR, CR_STP | CR_DM_ABORT);
    143139                (dep->de_stopf)(dep);
     140                dep->enabled = false;
     141                dep->stopped = false;
    144142                dep->sending = false;
    145143                dep->send_avail = false;
     
    152150        int sendq_head;
    153151       
    154         assert(dep->de_mode == DEM_ENABLED);
    155         assert(dep->de_flags & DEF_ENABLED);
     152        assert(dep->up);
     153        assert(dep->enabled);
    156154       
    157155        if (dep->send_avail) {
     
    213211       
    214212        /* General initialization */
     213        dep->enabled = false;
     214        dep->stopped = false;
    215215        dep->sending = false;
    216216        dep->send_avail = false;
    217217        (*dep->de_initf)(dep);
    218218       
    219         printf("%s: Ethernet address ", dep->de_name);
     219        printf("Ethernet address ");
    220220        for (i = 0; i < 6; i++)
    221221                printf("%x%c", dep->de_address.ea_addr[i], i < 5 ? ':' : '\n');
     
    241241       
    242242        /* Step 4: */
    243         dp_rcr_reg = 0;
    244        
    245         if (dep->de_flags & DEF_PROMISC)
    246                 dp_rcr_reg |= RCR_AB | RCR_PRO | RCR_AM;
    247        
    248         if (dep->de_flags & DEF_BROAD)
    249                 dp_rcr_reg |= RCR_AB;
    250        
    251         if (dep->de_flags & DEF_MULTI)
    252                 dp_rcr_reg |= RCR_AM;
     243        dp_rcr_reg = RCR_AB;  /* Enable broadcasts */
    253244       
    254245        outb_reg0(dep, DP_RCR, dp_rcr_reg);
     
    301292       
    302293        /* Finish the initialization. */
    303         dep->de_flags |= DEF_ENABLED;
     294        dep->enabled = true;
    304295        for (i = 0; i < dep->de_sendq_nr; i++)
    305296                dep->de_sendq[i].sq_filled= 0;
     
    325316        outb_reg0(dep, DP_CR, CR_PS_P0 | CR_EXTRA);
    326317       
    327         dp_rcr_reg = 0;
    328        
    329         if (dep->de_flags & DEF_PROMISC)
    330                 dp_rcr_reg |= RCR_AB | RCR_PRO | RCR_AM;
    331        
    332         if (dep->de_flags & DEF_BROAD)
    333                 dp_rcr_reg |= RCR_AB;
    334        
    335         if (dep->de_flags & DEF_MULTI)
    336                 dp_rcr_reg |= RCR_AM;
     318        /* Enable broadcasts */
     319        dp_rcr_reg = RCR_AB;
    337320       
    338321        outb_reg0(dep, DP_RCR, dp_rcr_reg);
     
    373356       
    374357        dep->send_avail = false;
    375         dep->de_flags &= ~DEF_STOPPED;
     358        dep->stopped = false;
    376359}
    377360
     
    389372        int tsr;
    390373        int size, sendq_tail;
    391        
    392         if (!(dep->de_flags & DEF_ENABLED))
    393                 fprintf(stderr, "dp8390: got premature interrupt\n");
    394374       
    395375        for (; (isr & 0x7f) != 0; isr = isr_acknowledge(dep)) {
     
    413393                               
    414394                                if ((tsr & TSR_FU) && (++dep->de_stat.ets_fifoUnder <= 10))
    415                                         printf("%s: fifo underrun\n", dep->de_name);
     395                                        printf("FIFO underrun\n");
    416396                               
    417397                                if ((tsr & TSR_CDH) && (++dep->de_stat.ets_CDheartbeat <= 10))
    418                                         printf("%s: CD heart beat failure\n", dep->de_name);
     398                                        printf("CD heart beat failure\n");
    419399                               
    420400                                if (tsr & TSR_OWC)
     
    425405                       
    426406                        if (!(dep->de_sendq[sendq_tail].sq_filled)) {
    427                                 /* Or hardware bug? */
    428                                 printf("%s: transmit interrupt, but not sending\n", dep->de_name);
     407                                printf("PTX interrupt, but no frame to send\n");
    429408                                continue;
    430409                        }
     
    470449                if (isr & ISR_RST) {
    471450                        /*
    472                          * This means we got an interrupt but the ethernet 
    473                          * chip is shutdown. We set the flag DEF_STOPPED,
     451                         * This means we got an interrupt but the ethernet
     452                         * chip is shutdown. We set the flag 'stopped'
    474453                         * and continue processing arrived packets. When the
    475454                         * receive buffer is empty, we reset the dp8390.
    476455                         */
    477                         dep->de_flags |= DEF_STOPPED;
     456                        dep->stopped = true;
    478457                        break;
    479458                }
    480459        }
    481460       
    482         if ((dep->de_flags & DEF_STOPPED) == DEF_STOPPED) {
     461        if (dep->stopped) {
    483462                /*
    484                  * The chip is stopped, and all arrived packets
    485                  * are delivered.
     463                 * The chip is stopped, and all arrived
     464                 * frames are delivered.
    486465                 */
    487466                dp_reset(dep);
     
    518497                next = header.dr_next;
    519498                if ((length < ETH_MIN_PACK_SIZE) || (length > ETH_MAX_PACK_SIZE_TAGGED)) {
    520                         printf("%s: packet with strange length arrived: %d\n", dep->de_name, (int) length);
     499                        printf("Packet with strange length arrived: %zu\n", length);
    521500                        next= curr;
    522501                } else if ((next < dep->de_startpage) || (next >= dep->de_stoppage)) {
    523                         printf("%s: strange next page\n", dep->de_name);
     502                        printf("Strange next page\n");
    524503                        next= curr;
    525504                } else if (header.dr_status & RSR_FO) {
     
    528507                         * reset the buffers
    529508                         */
    530                         printf("%s: fifo overrun, resetting receive buffer\n", dep->de_name);
     509                        printf("FIFO overrun, resetting receive buffer\n");
    531510                        dep->de_stat.ets_fifoOver++;
    532511                        next = curr;
    533                 } else if ((header.dr_status & RSR_PRX) && (dep->de_flags & DEF_ENABLED)) {
     512                } else if ((header.dr_status & RSR_PRX) && (dep->enabled)) {
    534513                        r = dp_pkt2user(nil_phone, device_id, dep, pageno, length);
    535514                        if (r != EOK)
     
    710689{
    711690        if (!ne_probe(dep)) {
    712                 printf("%s: No ethernet card found at %#lx\n",
    713                     dep->de_name, dep->de_base_port);
    714                 dep->de_mode= DEM_DISABLED;
     691                printf("No ethernet card found at %#lx\n", dep->de_base_port);
     692                dep->up = false;
    715693                return;
    716694        }
    717695       
    718         dep->de_mode = DEM_ENABLED;
     696        dep->up = true;
     697        dep->enabled = false;
     698        dep->stopped = false;
    719699        dep->sending = false;
    720700        dep->send_avail = false;
  • uspace/srv/hw/netif/dp8390/dp8390.h

    re3fe7df r66b628a  
    8989
    9090/** Page 1, read/write */
    91 #define DP_PAR0         0x1     /* Physical Address Register 0      */
    92 #define DP_PAR1         0x2     /* Physical Address Register 1      */
    93 #define DP_PAR2         0x3     /* Physical Address Register 2      */
    94 #define DP_PAR3         0x4     /* Physical Address Register 3      */
    95 #define DP_PAR4         0x5     /* Physical Address Register 4      */
    96 #define DP_PAR5         0x6     /* Physical Address Register 5      */
    97 #define DP_CURR         0x7     /* Current Page Register            */
    98 #define DP_MAR0         0x8     /* Multicast Address Register 0      */
    99 #define DP_MAR1         0x9     /* Multicast Address Register 1      */
    100 #define DP_MAR2         0xA     /* Multicast Address Register 2      */
    101 #define DP_MAR3         0xB     /* Multicast Address Register 3      */
    102 #define DP_MAR4         0xC     /* Multicast Address Register 4      */
    103 #define DP_MAR5         0xD     /* Multicast Address Register 5      */
    104 #define DP_MAR6         0xE     /* Multicast Address Register 6      */
    105 #define DP_MAR7         0xF     /* Multicast Address Register 7      */
     91#define DP_PAR0  0x01  /**< Physical Address Register 0 */
     92#define DP_PAR1  0x02  /**< Physical Address Register 1 */
     93#define DP_PAR2  0x03  /**< Physical Address Register 2 */
     94#define DP_PAR3  0x04  /**< Physical Address Register 3 */
     95#define DP_PAR4  0x05  /**< Physical Address Register 4 */
     96#define DP_PAR5  0x06  /**< Physical Address Register 5 */
     97#define DP_CURR  0x07  /**< Current Page Register */
     98#define DP_MAR0  0x08  /**< Multicast Address Register 0 */
     99#define DP_MAR1  0x09  /**< Multicast Address Register 1 */
     100#define DP_MAR2  0x0a  /**< Multicast Address Register 2 */
     101#define DP_MAR3  0x0b  /**< Multicast Address Register 3 */
     102#define DP_MAR4  0x0c  /**< Multicast Address Register 4 */
     103#define DP_MAR5  0x0d  /**< Multicast Address Register 5 */
     104#define DP_MAR6  0x0e  /**< Multicast Address Register 6 */
     105#define DP_MAR7  0x0f  /**< Multicast Address Register 7 */
    106106
    107107/* Bits in dp_cr */
     
    271271        dp_initf_t de_initf;
    272272        dp_stopf_t de_stopf;
    273         char de_name[sizeof("dp8390#n")];
    274273       
    275274        /*
     
    300299       
    301300        /* Fields for internal use by the dp8390 driver. */
    302         int de_flags;
    303         int de_mode;
    304301        eth_stat_t de_stat;
    305302        dp_user2nicf_t de_user2nicf;
     
    308305       
    309306        /* Driver flags */
     307        bool up;
     308        bool enabled;
     309        bool stopped;
    310310        bool sending;
    311311        bool send_avail;
    312312} dpeth_t;
    313313
    314 #define DEF_PROMISC     0x040
    315 #define DEF_MULTI       0x080
    316 #define DEF_BROAD       0x100
    317 #define DEF_ENABLED     0x200
    318 #define DEF_STOPPED     0x400
    319 
    320 #define DEM_DISABLED  0x0
    321 #define DEM_ENABLED   0x2
    322 
    323314#endif
    324315
  • uspace/srv/hw/netif/dp8390/dp8390_drv.h

    re3fe7df r66b628a  
    4040#include "dp8390.h"
    4141
    42 /** Initializes and/or starts the network interface.
    43  *  @param[in,out] dep The network interface structure.
    44  *  @param[in] mode The state mode.
    45  *  @returns EOK on success.
    46  *  @returns EXDEV if the network interface is disabled.
    47  */
    48 int do_init(dpeth_t *dep, int mode);
     42int do_init(dpeth_t *dep);
    4943
    5044/** Stops the network interface.
  • uspace/srv/hw/netif/dp8390/dp8390_module.c

    re3fe7df r66b628a  
    130130        fibril_rwlock_write_unlock(&netif_globals.lock);
    131131       
    132         if ((dep != NULL) && (dep->de_mode == DEM_ENABLED)) {
    133                 assert(dep->de_flags & DEF_ENABLED);
     132        if ((dep != NULL) && (dep->up)) {
     133                assert(dep->enabled);
    134134                dp_check_ints(nil_phone, device_id, dep, IRQ_GET_ISR(*call));
    135135        }
     
    233233        device->state = NETIF_STOPPED;
    234234        dep->de_irq = irq;
    235         dep->de_mode = DEM_DISABLED;
     235        dep->up = false;
    236236       
    237237        //TODO address?
     
    306306                        return rc;
    307307               
    308                 rc = do_init(dep, DL_BROAD_REQ);
     308                rc = do_init(dep);
    309309                if (rc != EOK) {
    310310                        ipc_unregister_irq(dep->de_irq, device->device_id);
  • uspace/srv/hw/netif/dp8390/dp8390_port.h

    re3fe7df r66b628a  
    7878#define outw(port, value)  pio_write_16((ioport16_t *) (port), (value))
    7979
    80 /* Bits in 'DL_MODE' field of DL requests. */
    81 #define DL_NOMODE       0x0
    82 #define DL_PROMISC_REQ  0x2
    83 #define DL_MULTI_REQ    0x4
    84 #define DL_BROAD_REQ    0x8
    85 
    8680/** Type definition of a port.
    8781 */
  • uspace/srv/hw/netif/dp8390/ne2000.c

    re3fe7df r66b628a  
    206206        dep->de_stoppage = dep->de_offset_page + dep->de_ramsize / DP_PAGESIZE;
    207207       
    208         printf("%s: Novell NE%d000 ethernet card at I/O address "
     208        printf("Novell NE%d000 ethernet card at I/O address "
    209209            "%#lx, memory size %#lx, irq %d\n",
    210             dep->de_name, dep->de_16bit ? 2 : 1,
    211             dep->de_base_port, dep->de_ramsize, dep->de_irq);
     210            dep->de_16bit ? 2 : 1, dep->de_base_port, dep->de_ramsize,
     211            dep->de_irq);
    212212}
    213213
     
    235235       
    236236        if (i == N) {
    237                 printf("%s: NE1000 remote DMA test failed\n", dep->de_name);
     237                printf("NE1000 remote DMA test failed\n");
    238238                return 0;
    239239        }
     
    274274       
    275275        if (i == N) {
    276                 printf("%s: NE2000 remote DMA test failed\n", dep->de_name);
     276                printf("NE2000 remote DMA test failed\n");
    277277                return 0;
    278278        }
Note: See TracChangeset for help on using the changeset viewer.