Changeset 56fd7cf in mainline for uspace/drv/nic


Ignore:
Timestamp:
2012-08-17T11:37:03Z (13 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1d5a540
Parents:
be2a38ad
Message:

Make ddf_dev_t and ddf_fun_t opaque. This further tighthens the DDF interface.

Location:
uspace/drv/nic
Files:
3 edited

Legend:

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

    rbe2a38ad r56fd7cf  
    3232 *
    3333 */
     34
     35/* XXX Fix this */
     36#define _DDF_DATA_IMPLANT
    3437
    3538#include <assert.h>
     
    7174        ((e1000_t *) nic_get_specific(nic))
    7275
    73 /** device_t* -> nic_driver_data_t* cast */
     76/** ddf_fun_t * -> nic_driver_data_t* cast */
     77#define NIC_DATA_FUN(fun) \
     78        ((nic_t *) ddf_fun_data_get(fun))
     79
     80/** ddf_dev_t * -> nic_driver_data_t* cast */
    7481#define NIC_DATA_DEV(dev) \
    75         ((nic_t *) ((dev)->driver_data))
    76 
    77 /** device_t* -> e1000_t* cast */
     82        ((nic_t *) ddf_dev_data_get(dev))
     83
     84/** ddf_dev_t * -> e1000_t* cast */
    7885#define DRIVER_DATA_DEV(dev) \
    7986        (DRIVER_DATA_NIC(NIC_DATA_DEV(dev)))
     87
     88/** ddf_fun_t * -> e1000_t* cast */
     89#define DRIVER_DATA_FUN(fun) \
     90        (DRIVER_DATA_NIC(NIC_DATA_FUN(fun)))
    8091
    8192/** Cast pointer to uint64_t
     
    305316 *
    306317 */
    307 static int e1000_get_cable_state(ddf_fun_t *dev, nic_cable_state_t *state)
    308 {
    309         assert(dev);
    310         assert(DRIVER_DATA_DEV(dev));
    311         assert(state);
    312        
    313         e1000_t *e1000 = DRIVER_DATA_DEV(dev);
     318static int e1000_get_cable_state(ddf_fun_t *fun, nic_cable_state_t *state)
     319{
     320        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    314321        if (E1000_REG_READ(e1000, E1000_STATUS) & (STATUS_LU))
    315322                *state = NIC_CS_PLUGGED;
     
    328335 *
    329336 */
    330 static int e1000_get_operation_mode(ddf_fun_t *dev, int *speed,
     337static int e1000_get_operation_mode(ddf_fun_t *fun, int *speed,
    331338    nic_channel_mode_t *duplex, nic_role_t *role)
    332339{
    333         e1000_t *e1000 = DRIVER_DATA_DEV(dev);
     340        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    334341        uint32_t status = E1000_REG_READ(e1000, E1000_STATUS);
    335342       
     
    376383 *
    377384 */
    378 static int e1000_set_operation_mode(ddf_fun_t *dev, int speed,
     385static int e1000_set_operation_mode(ddf_fun_t *fun, int speed,
    379386    nic_channel_mode_t duplex, nic_role_t role)
    380387{
     
    385392                return EINVAL;
    386393       
    387         e1000_t *e1000 = DRIVER_DATA_DEV(dev);
     394        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    388395       
    389396        fibril_mutex_lock(&e1000->ctrl_lock);
     
    424431 *
    425432 */
    426 static int e1000_autoneg_enable(ddf_fun_t *dev, uint32_t advertisement)
    427 {
    428         e1000_t *e1000 = DRIVER_DATA_DEV(dev);
     433static int e1000_autoneg_enable(ddf_fun_t *fun, uint32_t advertisement)
     434{
     435        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    429436       
    430437        fibril_mutex_lock(&e1000->ctrl_lock);
     
    452459 *
    453460 */
    454 static int e1000_autoneg_disable(ddf_fun_t *dev)
    455 {
    456         e1000_t *e1000 = DRIVER_DATA_DEV(dev);
     461static int e1000_autoneg_disable(ddf_fun_t *fun)
     462{
     463        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    457464       
    458465        fibril_mutex_lock(&e1000->ctrl_lock);
     
    491498 *
    492499 */
    493 static int e1000_defective_get_mode(ddf_fun_t *device, uint32_t *mode)
    494 {
    495         e1000_t *e1000 = DRIVER_DATA_DEV(device);
     500static int e1000_defective_get_mode(ddf_fun_t *fun, uint32_t *mode)
     501{
     502        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    496503       
    497504        *mode = 0;
     
    512519 *
    513520 */
    514 static int e1000_defective_set_mode(ddf_fun_t *device, uint32_t mode)
    515 {
    516         e1000_t *e1000 = DRIVER_DATA_DEV(device);
     521static int e1000_defective_set_mode(ddf_fun_t *fun, uint32_t mode)
     522{
     523        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    517524        int rc = EOK;
    518525       
     
    10381045 *
    10391046 */
    1040 static int e1000_vlan_set_tag(ddf_fun_t *device, uint16_t tag, bool add,
     1047static int e1000_vlan_set_tag(ddf_fun_t *fun, uint16_t tag, bool add,
    10411048    bool strip)
    10421049{
     
    10521059                return ENOTSUP;
    10531060       
    1054         e1000_t *e1000 = DRIVER_DATA_DEV(device);
     1061        e1000_t *e1000 = DRIVER_DATA_FUN(fun);
    10551062       
    10561063        e1000->vlan_tag = tag;
     
    18551862static e1000_t *e1000_create_dev_data(ddf_dev_t *dev)
    18561863{
    1857         assert(dev);
    1858         assert(!dev->driver_data);
    1859        
    18601864        nic_t *nic = nic_create_and_bind(dev);
    18611865        if (!nic)
     
    18961900        assert(dev);
    18971901       
    1898         if (dev->driver_data != NULL)
     1902        if (ddf_dev_data_get(dev) != NULL)
    18991903                nic_unbind_and_destroy(dev);
    19001904}
     
    19101914       
    19111915        e1000_delete_dev_data(dev);
    1912        
    1913         if (dev->parent_sess != NULL) {
    1914                 async_hangup(dev->parent_sess);
    1915                 dev->parent_sess = NULL;
    1916         }
    19171916}
    19181917
     
    19311930    const hw_res_list_parsed_t *hw_resources)
    19321931{
    1933         assert(dev != NULL);
    1934         assert(hw_resources != NULL);
    1935         assert(dev->driver_data != NULL);
    1936        
    19371932        e1000_t *e1000 = DRIVER_DATA_DEV(dev);
    19381933       
     
    20031998       
    20041999        uint16_t device_id;
    2005         rc = pci_config_space_read_16(dev->parent_sess, PCI_DEVICE_ID,
     2000        rc = pci_config_space_read_16(ddf_dev_parent_sess_get(dev), PCI_DEVICE_ID,
    20062001            &device_id);
    20072002        if (rc != EOK) {
     
    21212116       
    21222117        /* Device initialization */
    2123         nic_t *nic = dev->driver_data;
     2118        nic_t *nic = ddf_dev_data_get(dev);
    21242119        e1000_t *e1000 = DRIVER_DATA_NIC(nic);
    21252120       
     
    21472142                goto err_tx_structure;
    21482143        nic_set_ddf_fun(nic, fun);
    2149         fun->ops = &e1000_dev_ops;
    2150         fun->driver_data = nic;
     2144        ddf_fun_set_ops(fun, &e1000_dev_ops);
     2145        ddf_fun_data_implant(fun, nic);
    21512146       
    21522147        rc = e1000_register_int_handler(nic);
     
    22782273 * @return Negative error code otherwise
    22792274 */
    2280 static int e1000_set_addr(ddf_fun_t *dev, const nic_address_t *addr)
    2281 {
    2282         nic_t *nic = NIC_DATA_DEV(dev);
     2275static int e1000_set_addr(ddf_fun_t *fun, const nic_address_t *addr)
     2276{
     2277        nic_t *nic = NIC_DATA_FUN(fun);
    22832278        e1000_t *e1000 = DRIVER_DATA_NIC(nic);
    22842279       
  • uspace/drv/nic/ne2k/ne2k.c

    rbe2a38ad r56fd7cf  
    3838 */
    3939
     40/* XXX Fix this */
     41#define _DDF_DATA_IMPLANT
     42
    4043#include <stdio.h>
    4144#include <errno.h>
     
    6164#define IRQ_GET_TSR(call)  ((int) IPC_GET_ARG3(call))
    6265
    63 #define DRIVER_DATA(dev) ((nic_t *) ((dev)->driver_data))
     66#define DRIVER_DATA(dev) ((nic_t *) ddf_dev_data_get(dev))
    6467#define NE2K(device) ((ne2k_t *) nic_get_specific(DRIVER_DATA(device)))
    6568
     
    169172static void ne2k_dev_cleanup(ddf_dev_t *dev)
    170173{
    171         if (dev->driver_data != NULL) {
     174        if (ddf_dev_data_get(dev) != NULL) {
    172175                ne2k_t *ne2k = NE2K(dev);
    173176                if (ne2k) {
     
    177180                nic_unbind_and_destroy(dev);
    178181        }
    179         if (dev->parent_sess != NULL) {
    180                 async_hangup(dev->parent_sess);
    181                 dev->parent_sess = NULL;
    182         }
    183182}
    184183
     
    279278static int ne2k_set_address(ddf_fun_t *fun, const nic_address_t *address)
    280279{
    281         nic_t *nic_data = DRIVER_DATA(fun);
     280        nic_t *nic_data = DRIVER_DATA(ddf_fun_get_dev(fun));
    282281        int rc = nic_report_address(nic_data, address);
    283282        if (rc != EOK) {
     
    410409        }
    411410        nic_set_ddf_fun(nic_data, fun);
    412         fun->ops = &ne2k_dev_ops;
    413         fun->driver_data = nic_data;
     411        ddf_fun_set_ops(fun, &ne2k_dev_ops);
     412        ddf_fun_data_implant(fun, nic_data);
    414413       
    415414        rc = ddf_fun_bind(fun);
  • uspace/drv/nic/rtl8139/driver.c

    rbe2a38ad r56fd7cf  
    2727 */
    2828
     29/* XXX Fix this */
     30#define _DDF_DATA_IMPLANT
     31
    2932#include <assert.h>
    3033#include <errno.h>
     
    212215        rtl8139_regs_lock(rtl8139->io_port);
    213216
     217        async_sess_t *pci_sess =
     218                ddf_dev_parent_sess_get(nic_get_ddf_dev(rtl8139->nic_data));
     219
    214220        if (bit_val) {
    215                 async_sess_t *pci_sess =
    216                         nic_get_ddf_dev(rtl8139->nic_data)->parent_sess;
    217221                uint8_t pmen;
    218222                pci_config_space_read_8(pci_sess, 0x55, &pmen);
    219223                pci_config_space_write_8(pci_sess, 0x55, pmen | 1 | (1 << 7));
    220224        } else {
    221                 async_sess_t *pci_sess =
    222                         nic_get_ddf_dev(rtl8139->nic_data)->parent_sess;
    223225                uint8_t pmen;
    224226                pci_config_space_read_8(pci_sess, 0x55, &pmen);
     
    10521054        assert(dev);
    10531055
    1054         if (dev->driver_data)
     1056        if (ddf_dev_data_get(dev))
    10551057                nic_unbind_and_destroy(dev);
    1056 
    1057         if (dev->parent_sess != NULL) {
    1058                 async_hangup(dev->parent_sess);
    1059                 dev->parent_sess = NULL;
    1060         }
    10611058}
    10621059
     
    10801077
    10811078        if (hw_resources->irqs.count != 1) {
    1082                 ddf_msg(LVL_ERROR, "%s device: unexpected irq count", dev->name);
     1079                ddf_msg(LVL_ERROR, "%s device: unexpected irq count", ddf_dev_get_name(dev));
    10831080                return EINVAL;
    10841081        };
    10851082        if (hw_resources->io_ranges.count != 1) {
    1086                 ddf_msg(LVL_ERROR, "%s device: unexpected io ranges count", dev->name);
     1083                ddf_msg(LVL_ERROR, "%s device: unexpected io ranges count", ddf_dev_get_name(dev));
    10871084                return EINVAL;
    10881085        }
    10891086
    10901087        rtl8139->irq = hw_resources->irqs.irqs[0];
    1091         ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", dev->name, rtl8139->irq);
     1088        ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", ddf_dev_get_name(dev), rtl8139->irq);
    10921089
    10931090        rtl8139->io_addr = IOADDR_TO_PTR(hw_resources->io_ranges.ranges[0].address);
    10941091        if (hw_resources->io_ranges.ranges[0].size < RTL8139_IO_SIZE) {
    10951092                ddf_msg(LVL_ERROR, "i/o range assigned to the device "
    1096                     "%s is too small.", dev->name);
     1093                    "%s is too small.", ddf_dev_get_name(dev));
    10971094                return EINVAL;
    10981095        }
    1099         ddf_msg(LVL_DEBUG, "%s device: i/o addr %p assigned.", dev->name, rtl8139->io_addr);
     1096        ddf_msg(LVL_DEBUG, "%s device: i/o addr %p assigned.", ddf_dev_get_name(dev), rtl8139->io_addr);
    11001097
    11011098        return EOK;
     
    11921189static int rtl8139_device_initialize(ddf_dev_t *dev)
    11931190{
    1194         ddf_msg(LVL_DEBUG, "rtl8139_dev_initialize %s", dev->name);
     1191        ddf_msg(LVL_DEBUG, "rtl8139_dev_initialize %s", ddf_dev_get_name(dev));
    11951192
    11961193        int ret = EOK;
     
    12011198        rtl8139_t *rtl8139 = rtl8139_create_dev_data(dev);
    12021199        if (rtl8139 == NULL) {
    1203                 ddf_msg(LVL_ERROR, "Not enough memory for initializing %s.", dev->name);
     1200                ddf_msg(LVL_ERROR, "Not enough memory for initializing %s.", ddf_dev_get_name(dev));
    12041201                return ENOMEM;
    12051202        }
     
    12461243static int rtl8139_pio_enable(ddf_dev_t *dev)
    12471244{
    1248         ddf_msg(LVL_DEBUG, NAME ": rtl8139_pio_enable %s", dev->name);
     1245        ddf_msg(LVL_DEBUG, NAME ": rtl8139_pio_enable %s", ddf_dev_get_name(dev));
    12491246
    12501247        rtl8139_t *rtl8139 = nic_get_specific(nic_get_from_ddf_dev(dev));
     
    12531250        if (pio_enable(rtl8139->io_addr, RTL8139_IO_SIZE, &rtl8139->io_port)) {
    12541251                ddf_msg(LVL_ERROR, "Cannot gain the port %lx for device %s.", rtl8139->io_addr,
    1255                     dev->name);
     1252                    ddf_dev_get_name(dev));
    12561253                return EADDRNOTAVAIL;
    12571254        }
     
    12991296
    13001297        assert(dev);
    1301         ddf_msg(LVL_NOTE, "RTL8139_dev_add %s (handle = %d)", dev->name, dev->handle);
     1298        ddf_msg(LVL_NOTE, "RTL8139_dev_add %s (handle = %d)",
     1299            ddf_dev_get_name(dev), ddf_dev_get_handle(dev));
    13021300
    13031301        /* Init device structure for rtl8139 */
     
    13401338        }
    13411339        nic_set_ddf_fun(nic_data, fun);
    1342         fun->ops = &rtl8139_dev_ops;
    1343         fun->driver_data = nic_data;
     1340        ddf_fun_set_ops(fun, &rtl8139_dev_ops);
     1341        ddf_fun_data_implant(fun, nic_data);
    13441342
    13451343        rc = ddf_fun_bind(fun);
     
    13551353
    13561354        ddf_msg(LVL_NOTE, "The %s device has been successfully initialized.",
    1357             dev->name);
     1355            ddf_dev_get_name(dev));
    13581356
    13591357        return EOK;
Note: See TracChangeset for help on using the changeset viewer.