Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/e1k/e1k.c

    r7de1988c rf2c19b0  
    5959#define E1000_DEFAULT_INTERRUPT_INTERVAL_USEC  250
    6060
    61 /* Must be power of 8 */
    62 #define E1000_RX_FRAME_COUNT  128
    63 #define E1000_TX_FRAME_COUNT  128
     61/* Must be power of 8 */ //TODO power or multiple? previous value was 128
     62#define E1000_RX_FRAME_COUNT  8
     63#define E1000_TX_FRAME_COUNT  8
    6464
    6565#define E1000_RECEIVE_ADDRESS  16
     
    129129       
    130130        /** Physical tx ring address */
    131         uintptr_t tx_ring_phys;
     131        void *tx_ring_phys;
    132132        /** Virtual tx ring address */
    133133        void *tx_ring_virt;
    134134       
    135135        /** Ring of TX frames, physical address */
    136         uintptr_t *tx_frame_phys;
     136        void **tx_frame_phys;
    137137        /** Ring of TX frames, virtual address */
    138138        void **tx_frame_virt;
    139139       
    140140        /** Physical rx ring address */
    141         uintptr_t rx_ring_phys;
     141        void *rx_ring_phys;
    142142        /** Virtual rx ring address */
    143143        void *rx_ring_virt;
    144144       
    145145        /** Ring of RX frames, physical address */
    146         uintptr_t *rx_frame_phys;
     146        void **rx_frame_phys;
    147147        /** Ring of RX frames, virtual address */
    148148        void **rx_frame_virt;
     
    13771377        int rc = dmamem_map_anonymous(
    13781378            E1000_RX_FRAME_COUNT * sizeof(e1000_rx_descriptor_t),
    1379             DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE, 0,
    1380             &e1000->rx_ring_phys, &e1000->rx_ring_virt);
     1379            AS_AREA_READ | AS_AREA_WRITE, 0, &e1000->rx_ring_phys,
     1380            &e1000->rx_ring_virt);
    13811381        if (rc != EOK)
    13821382                return rc;
     
    13871387            (uint32_t) PTR_TO_U64(e1000->rx_ring_phys));
    13881388       
    1389         e1000->rx_frame_phys = (uintptr_t *)
    1390             calloc(E1000_RX_FRAME_COUNT, sizeof(uintptr_t));
     1389        e1000->rx_frame_phys =
     1390            calloc(E1000_RX_FRAME_COUNT, sizeof(void *));
    13911391        e1000->rx_frame_virt =
    13921392            calloc(E1000_RX_FRAME_COUNT, sizeof(void *));
    1393         if ((e1000->rx_frame_phys == NULL) || (e1000->rx_frame_virt == NULL)) {
     1393        if (e1000->rx_frame_phys == NULL || e1000->rx_frame_virt == NULL) {
    13941394                rc = ENOMEM;
    13951395                goto error;
     
    13971397       
    13981398        size_t i;
    1399         uintptr_t frame_phys;
    14001399        void *frame_virt;
     1400        void *frame_phys;
    14011401       
    14021402        for (i = 0; i < E1000_RX_FRAME_COUNT; i++) {
    1403                 rc = dmamem_map_anonymous(E1000_MAX_SEND_FRAME_SIZE,
    1404                     DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE, 0,
    1405                     &frame_phys, &frame_virt);
     1403                rc = dmamem_map_anonymous(
     1404                    E1000_MAX_SEND_FRAME_SIZE, AS_AREA_READ | AS_AREA_WRITE,
     1405                    0, &frame_phys, &frame_virt);
    14061406                if (rc != EOK)
    14071407                        goto error;
    14081408               
     1409                e1000->rx_frame_virt[i] = frame_virt;
    14091410                e1000->rx_frame_phys[i] = frame_phys;
    1410                 e1000->rx_frame_virt[i] = frame_virt;
    14111411        }
    14121412       
     
    14241424                if (e1000->rx_frame_virt[i] != NULL) {
    14251425                        dmamem_unmap_anonymous(e1000->rx_frame_virt[i]);
    1426                         e1000->rx_frame_phys[i] = 0;
    14271426                        e1000->rx_frame_virt[i] = NULL;
     1427                        e1000->rx_frame_phys[i] = NULL;
    14281428                }
    14291429        }
     
    14361436        if (e1000->rx_frame_virt != NULL) {
    14371437                free(e1000->rx_frame_virt);
    1438                 e1000->rx_frame_virt = NULL;
     1438                e1000->rx_frame_phys = NULL;
    14391439        }
    14401440       
     
    14541454        for (unsigned int offset = 0; offset < E1000_RX_FRAME_COUNT; offset++) {
    14551455                dmamem_unmap_anonymous(e1000->rx_frame_virt[offset]);
    1456                 e1000->rx_frame_phys[offset] = 0;
    14571456                e1000->rx_frame_virt[offset] = NULL;
     1457                e1000->rx_frame_phys[offset] = NULL;
    14581458        }
    14591459       
    14601460        free(e1000->rx_frame_virt);
    1461        
     1461        free(e1000->rx_frame_phys);
     1462        e1000->rx_frame_virt = NULL;
    14621463        e1000->rx_frame_phys = NULL;
    1463         e1000->rx_frame_virt = NULL;
    1464        
    14651464        dmamem_unmap_anonymous(e1000->rx_ring_virt);
    14661465}
     
    15701569        fibril_mutex_lock(&e1000->tx_lock);
    15711570       
    1572         e1000->tx_ring_phys = 0;
     1571        e1000->tx_ring_phys = NULL;
    15731572        e1000->tx_ring_virt = NULL;
    1574        
    15751573        e1000->tx_frame_phys = NULL;
    15761574        e1000->tx_frame_virt = NULL;
     
    15781576        int rc = dmamem_map_anonymous(
    15791577            E1000_TX_FRAME_COUNT * sizeof(e1000_tx_descriptor_t),
    1580             DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE, 0,
    1581             &e1000->tx_ring_phys, &e1000->tx_ring_virt);
     1578            AS_AREA_READ | AS_AREA_WRITE, 0, &e1000->tx_ring_phys,
     1579            &e1000->tx_ring_virt);
    15821580        if (rc != EOK)
    15831581                goto error;
     
    15861584            E1000_TX_FRAME_COUNT * sizeof(e1000_tx_descriptor_t));
    15871585       
    1588         e1000->tx_frame_phys = (uintptr_t *)
    1589             calloc(E1000_TX_FRAME_COUNT, sizeof(uintptr_t));
    1590         e1000->tx_frame_virt =
    1591             calloc(E1000_TX_FRAME_COUNT, sizeof(void *));
    1592 
    1593         if ((e1000->tx_frame_phys == NULL) || (e1000->tx_frame_virt == NULL)) {
     1586        e1000->tx_frame_phys = calloc(E1000_TX_FRAME_COUNT, sizeof(void *));
     1587        e1000->tx_frame_virt = calloc(E1000_TX_FRAME_COUNT, sizeof(void *));
     1588
     1589        if (e1000->tx_frame_phys == NULL || e1000->tx_frame_virt == NULL) {
    15941590                rc = ENOMEM;
    15951591                goto error;
     
    15971593       
    15981594        for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
    1599                 rc = dmamem_map_anonymous(E1000_MAX_SEND_FRAME_SIZE,
    1600                     DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE,
     1595                rc = dmamem_map_anonymous(
     1596                    E1000_MAX_SEND_FRAME_SIZE, AS_AREA_READ | AS_AREA_WRITE,
    16011597                    0, &e1000->tx_frame_phys[i], &e1000->tx_frame_virt[i]);
    16021598                if (rc != EOK)
     
    16201616        }
    16211617       
    1622         if ((e1000->tx_frame_phys != NULL) && (e1000->tx_frame_virt != NULL)) {
     1618        if (e1000->tx_frame_phys != NULL && e1000->tx_frame_virt != NULL) {
    16231619                for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
    16241620                        if (e1000->tx_frame_virt[i] != NULL) {
    16251621                                dmamem_unmap_anonymous(e1000->tx_frame_virt[i]);
    1626                                 e1000->tx_frame_phys[i] = 0;
    16271622                                e1000->tx_frame_virt[i] = NULL;
     1623                                e1000->tx_frame_phys[i] = NULL;
    16281624                        }
    16291625                }
     
    16371633        if (e1000->tx_frame_virt != NULL) {
    16381634                free(e1000->tx_frame_virt);
    1639                 e1000->tx_frame_virt = NULL;
     1635                e1000->tx_frame_phys = NULL;
    16401636        }
    16411637       
     
    16541650        for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
    16551651                dmamem_unmap_anonymous(e1000->tx_frame_virt[i]);
    1656                 e1000->tx_frame_phys[i] = 0;
    16571652                e1000->tx_frame_virt[i] = NULL;
     1653                e1000->tx_frame_phys[i] = NULL;
    16581654        }
    16591655       
     
    16651661        if (e1000->tx_frame_virt != NULL) {
    16661662                free(e1000->tx_frame_virt);
    1667                 e1000->tx_frame_virt = NULL;
     1663                e1000->tx_frame_phys = NULL;
    16681664        }
    16691665       
     
    19411937        e1000->irq = hw_resources->irqs.irqs[0];
    19421938        e1000->reg_base_phys =
    1943             MEMADDR_TO_PTR(RNGABS(hw_resources->mem_ranges.ranges[0]));
     1939            MEMADDR_TO_PTR(hw_resources->mem_ranges.ranges[0].address);
    19441940       
    19451941        return EOK;
Note: See TracChangeset for help on using the changeset viewer.