Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * RapidIO interconnect services
0004  * (RapidIO Interconnect Specification, http://www.rapidio.org)
0005  *
0006  * Copyright 2005 MontaVista Software, Inc.
0007  * Matt Porter <mporter@kernel.crashing.org>
0008  */
0009 
0010 #ifndef LINUX_RIO_H
0011 #define LINUX_RIO_H
0012 
0013 #include <linux/types.h>
0014 #include <linux/ioport.h>
0015 #include <linux/list.h>
0016 #include <linux/errno.h>
0017 #include <linux/device.h>
0018 #include <linux/rio_regs.h>
0019 #include <linux/mod_devicetable.h>
0020 #ifdef CONFIG_RAPIDIO_DMA_ENGINE
0021 #include <linux/dmaengine.h>
0022 #endif
0023 
0024 #define RIO_NO_HOPCOUNT     -1
0025 #define RIO_INVALID_DESTID  0xffff
0026 
0027 #define RIO_MAX_MPORTS      8
0028 #define RIO_MAX_MPORT_RESOURCES 16
0029 #define RIO_MAX_DEV_RESOURCES   16
0030 #define RIO_MAX_MPORT_NAME  40
0031 
0032 #define RIO_GLOBAL_TABLE    0xff    /* Indicates access of a switch's
0033                        global routing table if it
0034                        has multiple (or per port)
0035                        tables */
0036 
0037 #define RIO_INVALID_ROUTE   0xff    /* Indicates that a route table
0038                        entry is invalid (no route
0039                        exists for the device ID) */
0040 
0041 #define RIO_MAX_ROUTE_ENTRIES(size) (size ? (1 << 16) : (1 << 8))
0042 #define RIO_ANY_DESTID(size)        (size ? 0xffff : 0xff)
0043 
0044 #define RIO_MAX_MBOX        4
0045 #define RIO_MAX_MSG_SIZE    0x1000
0046 
0047 /*
0048  * Error values that may be returned by RIO functions.
0049  */
0050 #define RIO_SUCCESSFUL          0x00
0051 #define RIO_BAD_SIZE            0x81
0052 
0053 /*
0054  * For RIO devices, the region numbers are assigned this way:
0055  *
0056  *  0   RapidIO outbound doorbells
0057  *      1-15    RapidIO memory regions
0058  *
0059  * For RIO master ports, the region number are assigned this way:
0060  *
0061  *  0   RapidIO inbound doorbells
0062  *  1   RapidIO inbound mailboxes
0063  *  2   RapidIO outbound mailboxes
0064  */
0065 #define RIO_DOORBELL_RESOURCE   0
0066 #define RIO_INB_MBOX_RESOURCE   1
0067 #define RIO_OUTB_MBOX_RESOURCE  2
0068 
0069 #define RIO_PW_MSG_SIZE     64
0070 
0071 /*
0072  * A component tag value (stored in the component tag CSR) is used as device's
0073  * unique identifier assigned during enumeration. Besides being used for
0074  * identifying switches (which do not have device ID register), it also is used
0075  * by error management notification and therefore has to be assigned
0076  * to endpoints as well.
0077  */
0078 #define RIO_CTAG_RESRVD 0xfffe0000 /* Reserved */
0079 #define RIO_CTAG_UDEVID 0x0001ffff /* Unique device identifier */
0080 
0081 extern struct bus_type rio_bus_type;
0082 extern struct class rio_mport_class;
0083 
0084 struct rio_mport;
0085 struct rio_dev;
0086 union rio_pw_msg;
0087 
0088 /**
0089  * struct rio_switch - RIO switch info
0090  * @node: Node in global list of switches
0091  * @route_table: Copy of switch routing table
0092  * @port_ok: Status of each port (one bit per port) - OK=1 or UNINIT=0
0093  * @ops: pointer to switch-specific operations
0094  * @lock: lock to serialize operations updates
0095  * @nextdev: Array of per-port pointers to the next attached device
0096  */
0097 struct rio_switch {
0098     struct list_head node;
0099     u8 *route_table;
0100     u32 port_ok;
0101     struct rio_switch_ops *ops;
0102     spinlock_t lock;
0103     struct rio_dev *nextdev[];
0104 };
0105 
0106 /**
0107  * struct rio_switch_ops - Per-switch operations
0108  * @owner: The module owner of this structure
0109  * @add_entry: Callback for switch-specific route add function
0110  * @get_entry: Callback for switch-specific route get function
0111  * @clr_table: Callback for switch-specific clear route table function
0112  * @set_domain: Callback for switch-specific domain setting function
0113  * @get_domain: Callback for switch-specific domain get function
0114  * @em_init: Callback for switch-specific error management init function
0115  * @em_handle: Callback for switch-specific error management handler function
0116  *
0117  * Defines the operations that are necessary to initialize/control
0118  * a particular RIO switch device.
0119  */
0120 struct rio_switch_ops {
0121     struct module *owner;
0122     int (*add_entry) (struct rio_mport *mport, u16 destid, u8 hopcount,
0123               u16 table, u16 route_destid, u8 route_port);
0124     int (*get_entry) (struct rio_mport *mport, u16 destid, u8 hopcount,
0125               u16 table, u16 route_destid, u8 *route_port);
0126     int (*clr_table) (struct rio_mport *mport, u16 destid, u8 hopcount,
0127               u16 table);
0128     int (*set_domain) (struct rio_mport *mport, u16 destid, u8 hopcount,
0129                u8 sw_domain);
0130     int (*get_domain) (struct rio_mport *mport, u16 destid, u8 hopcount,
0131                u8 *sw_domain);
0132     int (*em_init) (struct rio_dev *dev);
0133     int (*em_handle) (struct rio_dev *dev, u8 swport);
0134 };
0135 
0136 enum rio_device_state {
0137     RIO_DEVICE_INITIALIZING,
0138     RIO_DEVICE_RUNNING,
0139     RIO_DEVICE_GONE,
0140     RIO_DEVICE_SHUTDOWN,
0141 };
0142 
0143 /**
0144  * struct rio_dev - RIO device info
0145  * @global_list: Node in list of all RIO devices
0146  * @net_list: Node in list of RIO devices in a network
0147  * @net: Network this device is a part of
0148  * @do_enum: Enumeration flag
0149  * @did: Device ID
0150  * @vid: Vendor ID
0151  * @device_rev: Device revision
0152  * @asm_did: Assembly device ID
0153  * @asm_vid: Assembly vendor ID
0154  * @asm_rev: Assembly revision
0155  * @efptr: Extended feature pointer
0156  * @pef: Processing element features
0157  * @swpinfo: Switch port info
0158  * @src_ops: Source operation capabilities
0159  * @dst_ops: Destination operation capabilities
0160  * @comp_tag: RIO component tag
0161  * @phys_efptr: RIO device extended features pointer
0162  * @phys_rmap: LP-Serial Register Map Type (1 or 2)
0163  * @em_efptr: RIO Error Management features pointer
0164  * @dma_mask: Mask of bits of RIO address this device implements
0165  * @driver: Driver claiming this device
0166  * @dev: Device model device
0167  * @riores: RIO resources this device owns
0168  * @pwcback: port-write callback function for this device
0169  * @destid: Network destination ID (or associated destid for switch)
0170  * @hopcount: Hopcount to this device
0171  * @prev: Previous RIO device connected to the current one
0172  * @state: device state
0173  * @rswitch: struct rio_switch (if valid for this device)
0174  */
0175 struct rio_dev {
0176     struct list_head global_list;   /* node in list of all RIO devices */
0177     struct list_head net_list;  /* node in per net list */
0178     struct rio_net *net;    /* RIO net this device resides in */
0179     bool do_enum;
0180     u16 did;
0181     u16 vid;
0182     u32 device_rev;
0183     u16 asm_did;
0184     u16 asm_vid;
0185     u16 asm_rev;
0186     u16 efptr;
0187     u32 pef;
0188     u32 swpinfo;
0189     u32 src_ops;
0190     u32 dst_ops;
0191     u32 comp_tag;
0192     u32 phys_efptr;
0193     u32 phys_rmap;
0194     u32 em_efptr;
0195     u64 dma_mask;
0196     struct rio_driver *driver;  /* RIO driver claiming this device */
0197     struct device dev;  /* LDM device structure */
0198     struct resource riores[RIO_MAX_DEV_RESOURCES];
0199     int (*pwcback) (struct rio_dev *rdev, union rio_pw_msg *msg, int step);
0200     u16 destid;
0201     u8 hopcount;
0202     struct rio_dev *prev;
0203     atomic_t state;
0204     struct rio_switch rswitch[];    /* RIO switch info */
0205 };
0206 
0207 #define rio_dev_g(n) list_entry(n, struct rio_dev, global_list)
0208 #define rio_dev_f(n) list_entry(n, struct rio_dev, net_list)
0209 #define to_rio_dev(n) container_of(n, struct rio_dev, dev)
0210 #define sw_to_rio_dev(n) container_of(n, struct rio_dev, rswitch[0])
0211 #define to_rio_mport(n) container_of(n, struct rio_mport, dev)
0212 #define to_rio_net(n) container_of(n, struct rio_net, dev)
0213 
0214 /**
0215  * struct rio_msg - RIO message event
0216  * @res: Mailbox resource
0217  * @mcback: Message event callback
0218  */
0219 struct rio_msg {
0220     struct resource *res;
0221     void (*mcback) (struct rio_mport * mport, void *dev_id, int mbox, int slot);
0222 };
0223 
0224 /**
0225  * struct rio_dbell - RIO doorbell event
0226  * @node: Node in list of doorbell events
0227  * @res: Doorbell resource
0228  * @dinb: Doorbell event callback
0229  * @dev_id: Device specific pointer to pass on event
0230  */
0231 struct rio_dbell {
0232     struct list_head node;
0233     struct resource *res;
0234     void (*dinb) (struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info);
0235     void *dev_id;
0236 };
0237 
0238 /**
0239  * struct rio_mport - RIO master port info
0240  * @dbells: List of doorbell events
0241  * @pwrites: List of portwrite events
0242  * @node: Node in global list of master ports
0243  * @nnode: Node in network list of master ports
0244  * @net: RIO net this mport is attached to
0245  * @lock: lock to synchronize lists manipulations
0246  * @iores: I/O mem resource that this master port interface owns
0247  * @riores: RIO resources that this master port interfaces owns
0248  * @inb_msg: RIO inbound message event descriptors
0249  * @outb_msg: RIO outbound message event descriptors
0250  * @host_deviceid: Host device ID associated with this master port
0251  * @ops: configuration space functions
0252  * @id: Port ID, unique among all ports
0253  * @index: Port index, unique among all port interfaces of the same type
0254  * @sys_size: RapidIO common transport system size
0255  * @phys_efptr: RIO port extended features pointer
0256  * @phys_rmap: LP-Serial EFB Register Mapping type (1 or 2).
0257  * @name: Port name string
0258  * @dev: device structure associated with an mport
0259  * @priv: Master port private data
0260  * @dma: DMA device associated with mport
0261  * @nscan: RapidIO network enumeration/discovery operations
0262  * @state: mport device state
0263  * @pwe_refcnt: port-write enable ref counter to track enable/disable requests
0264  */
0265 struct rio_mport {
0266     struct list_head dbells;    /* list of doorbell events */
0267     struct list_head pwrites;   /* list of portwrite events */
0268     struct list_head node;  /* node in global list of ports */
0269     struct list_head nnode; /* node in net list of ports */
0270     struct rio_net *net;    /* RIO net this mport is attached to */
0271     struct mutex lock;
0272     struct resource iores;
0273     struct resource riores[RIO_MAX_MPORT_RESOURCES];
0274     struct rio_msg inb_msg[RIO_MAX_MBOX];
0275     struct rio_msg outb_msg[RIO_MAX_MBOX];
0276     int host_deviceid;  /* Host device ID */
0277     struct rio_ops *ops;    /* low-level architecture-dependent routines */
0278     unsigned char id;   /* port ID, unique among all ports */
0279     unsigned char index;    /* port index, unique among all port
0280                    interfaces of the same type */
0281     unsigned int sys_size;  /* RapidIO common transport system size.
0282                  * 0 - Small size. 256 devices.
0283                  * 1 - Large size, 65536 devices.
0284                  */
0285     u32 phys_efptr;
0286     u32 phys_rmap;
0287     unsigned char name[RIO_MAX_MPORT_NAME];
0288     struct device dev;
0289     void *priv;     /* Master port private data */
0290 #ifdef CONFIG_RAPIDIO_DMA_ENGINE
0291     struct dma_device   dma;
0292 #endif
0293     struct rio_scan *nscan;
0294     atomic_t state;
0295     unsigned int pwe_refcnt;
0296 };
0297 
0298 static inline int rio_mport_is_running(struct rio_mport *mport)
0299 {
0300     return atomic_read(&mport->state) == RIO_DEVICE_RUNNING;
0301 }
0302 
0303 /*
0304  * Enumeration/discovery control flags
0305  */
0306 #define RIO_SCAN_ENUM_NO_WAIT   0x00000001 /* Do not wait for enum completed */
0307 
0308 /**
0309  * struct rio_net - RIO network info
0310  * @node: Node in global list of RIO networks
0311  * @devices: List of devices in this network
0312  * @switches: List of switches in this network
0313  * @mports: List of master ports accessing this network
0314  * @hport: Default port for accessing this network
0315  * @id: RIO network ID
0316  * @dev: Device object
0317  * @enum_data: private data specific to a network enumerator
0318  * @release: enumerator-specific release callback
0319  */
0320 struct rio_net {
0321     struct list_head node;  /* node in list of networks */
0322     struct list_head devices;   /* list of devices in this net */
0323     struct list_head switches;  /* list of switches in this net */
0324     struct list_head mports;    /* list of ports accessing net */
0325     struct rio_mport *hport;    /* primary port for accessing net */
0326     unsigned char id;   /* RIO network ID */
0327     struct device dev;
0328     void *enum_data;    /* private data for enumerator of the network */
0329     void (*release)(struct rio_net *net);
0330 };
0331 
0332 enum rio_link_speed {
0333     RIO_LINK_DOWN = 0, /* SRIO Link not initialized */
0334     RIO_LINK_125 = 1, /* 1.25 GBaud  */
0335     RIO_LINK_250 = 2, /* 2.5 GBaud   */
0336     RIO_LINK_312 = 3, /* 3.125 GBaud */
0337     RIO_LINK_500 = 4, /* 5.0 GBaud   */
0338     RIO_LINK_625 = 5  /* 6.25 GBaud  */
0339 };
0340 
0341 enum rio_link_width {
0342     RIO_LINK_1X  = 0,
0343     RIO_LINK_1XR = 1,
0344     RIO_LINK_2X  = 3,
0345     RIO_LINK_4X  = 2,
0346     RIO_LINK_8X  = 4,
0347     RIO_LINK_16X = 5
0348 };
0349 
0350 enum rio_mport_flags {
0351     RIO_MPORT_DMA    = (1 << 0), /* supports DMA data transfers */
0352     RIO_MPORT_DMA_SG = (1 << 1), /* DMA supports HW SG mode */
0353     RIO_MPORT_IBSG   = (1 << 2), /* inbound mapping supports SG */
0354 };
0355 
0356 /**
0357  * struct rio_mport_attr - RIO mport device attributes
0358  * @flags: mport device capability flags
0359  * @link_speed: SRIO link speed value (as defined by RapidIO specification)
0360  * @link_width: SRIO link width value (as defined by RapidIO specification)
0361  * @dma_max_sge: number of SG list entries that can be handled by DMA channel(s)
0362  * @dma_max_size: max number of bytes in single DMA transfer (SG entry)
0363  * @dma_align: alignment shift for DMA operations (as for other DMA operations)
0364  */
0365 struct rio_mport_attr {
0366     int flags;
0367     int link_speed;
0368     int link_width;
0369 
0370     /* DMA capability info: valid only if RIO_MPORT_DMA flag is set */
0371     int dma_max_sge;
0372     int dma_max_size;
0373     int dma_align;
0374 };
0375 
0376 /* Low-level architecture-dependent routines */
0377 
0378 /**
0379  * struct rio_ops - Low-level RIO configuration space operations
0380  * @lcread: Callback to perform local (master port) read of config space.
0381  * @lcwrite: Callback to perform local (master port) write of config space.
0382  * @cread: Callback to perform network read of config space.
0383  * @cwrite: Callback to perform network write of config space.
0384  * @dsend: Callback to send a doorbell message.
0385  * @pwenable: Callback to enable/disable port-write message handling.
0386  * @open_outb_mbox: Callback to initialize outbound mailbox.
0387  * @close_outb_mbox: Callback to shut down outbound mailbox.
0388  * @open_inb_mbox: Callback to initialize inbound mailbox.
0389  * @close_inb_mbox: Callback to shut down inbound mailbox.
0390  * @add_outb_message: Callback to add a message to an outbound mailbox queue.
0391  * @add_inb_buffer: Callback to add a buffer to an inbound mailbox queue.
0392  * @get_inb_message: Callback to get a message from an inbound mailbox queue.
0393  * @map_inb: Callback to map RapidIO address region into local memory space.
0394  * @unmap_inb: Callback to unmap RapidIO address region mapped with map_inb().
0395  * @query_mport: Callback to query mport device attributes.
0396  * @map_outb: Callback to map outbound address region into local memory space.
0397  * @unmap_outb: Callback to unmap outbound RapidIO address region.
0398  */
0399 struct rio_ops {
0400     int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len,
0401             u32 *data);
0402     int (*lcwrite) (struct rio_mport *mport, int index, u32 offset, int len,
0403             u32 data);
0404     int (*cread) (struct rio_mport *mport, int index, u16 destid,
0405             u8 hopcount, u32 offset, int len, u32 *data);
0406     int (*cwrite) (struct rio_mport *mport, int index, u16 destid,
0407             u8 hopcount, u32 offset, int len, u32 data);
0408     int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data);
0409     int (*pwenable) (struct rio_mport *mport, int enable);
0410     int (*open_outb_mbox)(struct rio_mport *mport, void *dev_id,
0411                   int mbox, int entries);
0412     void (*close_outb_mbox)(struct rio_mport *mport, int mbox);
0413     int  (*open_inb_mbox)(struct rio_mport *mport, void *dev_id,
0414                  int mbox, int entries);
0415     void (*close_inb_mbox)(struct rio_mport *mport, int mbox);
0416     int  (*add_outb_message)(struct rio_mport *mport, struct rio_dev *rdev,
0417                  int mbox, void *buffer, size_t len);
0418     int (*add_inb_buffer)(struct rio_mport *mport, int mbox, void *buf);
0419     void *(*get_inb_message)(struct rio_mport *mport, int mbox);
0420     int (*map_inb)(struct rio_mport *mport, dma_addr_t lstart,
0421             u64 rstart, u64 size, u32 flags);
0422     void (*unmap_inb)(struct rio_mport *mport, dma_addr_t lstart);
0423     int (*query_mport)(struct rio_mport *mport,
0424                struct rio_mport_attr *attr);
0425     int (*map_outb)(struct rio_mport *mport, u16 destid, u64 rstart,
0426             u32 size, u32 flags, dma_addr_t *laddr);
0427     void (*unmap_outb)(struct rio_mport *mport, u16 destid, u64 rstart);
0428 };
0429 
0430 #define RIO_RESOURCE_MEM    0x00000100
0431 #define RIO_RESOURCE_DOORBELL   0x00000200
0432 #define RIO_RESOURCE_MAILBOX    0x00000400
0433 
0434 #define RIO_RESOURCE_CACHEABLE  0x00010000
0435 #define RIO_RESOURCE_PCI    0x00020000
0436 
0437 #define RIO_RESOURCE_BUSY   0x80000000
0438 
0439 /**
0440  * struct rio_driver - RIO driver info
0441  * @node: Node in list of drivers
0442  * @name: RIO driver name
0443  * @id_table: RIO device ids to be associated with this driver
0444  * @probe: RIO device inserted
0445  * @remove: RIO device removed
0446  * @shutdown: shutdown notification callback
0447  * @suspend: RIO device suspended
0448  * @resume: RIO device awakened
0449  * @enable_wake: RIO device enable wake event
0450  * @driver: LDM driver struct
0451  *
0452  * Provides info on a RIO device driver for insertion/removal and
0453  * power management purposes.
0454  */
0455 struct rio_driver {
0456     struct list_head node;
0457     char *name;
0458     const struct rio_device_id *id_table;
0459     int (*probe) (struct rio_dev * dev, const struct rio_device_id * id);
0460     void (*remove) (struct rio_dev * dev);
0461     void (*shutdown)(struct rio_dev *dev);
0462     int (*suspend) (struct rio_dev * dev, u32 state);
0463     int (*resume) (struct rio_dev * dev);
0464     int (*enable_wake) (struct rio_dev * dev, u32 state, int enable);
0465     struct device_driver driver;
0466 };
0467 
0468 #define to_rio_driver(drv) container_of(drv,struct rio_driver, driver)
0469 
0470 union rio_pw_msg {
0471     struct {
0472         u32 comptag;    /* Component Tag CSR */
0473         u32 errdetect;  /* Port N Error Detect CSR */
0474         u32 is_port;    /* Implementation specific + PortID */
0475         u32 ltlerrdet;  /* LTL Error Detect CSR */
0476         u32 padding[12];
0477     } em;
0478     u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)];
0479 };
0480 
0481 #ifdef CONFIG_RAPIDIO_DMA_ENGINE
0482 
0483 /*
0484  * enum rio_write_type - RIO write transaction types used in DMA transfers
0485  *
0486  * Note: RapidIO specification defines write (NWRITE) and
0487  * write-with-response (NWRITE_R) data transfer operations.
0488  * Existing DMA controllers that service RapidIO may use one of these operations
0489  * for entire data transfer or their combination with only the last data packet
0490  * requires response.
0491  */
0492 enum rio_write_type {
0493     RDW_DEFAULT,        /* default method used by DMA driver */
0494     RDW_ALL_NWRITE,     /* all packets use NWRITE */
0495     RDW_ALL_NWRITE_R,   /* all packets use NWRITE_R */
0496     RDW_LAST_NWRITE_R,  /* last packet uses NWRITE_R, others - NWRITE */
0497 };
0498 
0499 struct rio_dma_ext {
0500     u16 destid;
0501     u64 rio_addr;   /* low 64-bits of 66-bit RapidIO address */
0502     u8  rio_addr_u;  /* upper 2-bits of 66-bit RapidIO address */
0503     enum rio_write_type wr_type; /* preferred RIO write operation type */
0504 };
0505 
0506 struct rio_dma_data {
0507     /* Local data (as scatterlist) */
0508     struct scatterlist  *sg;    /* I/O scatter list */
0509     unsigned int        sg_len; /* size of scatter list */
0510     /* Remote device address (flat buffer) */
0511     u64 rio_addr;   /* low 64-bits of 66-bit RapidIO address */
0512     u8  rio_addr_u;  /* upper 2-bits of 66-bit RapidIO address */
0513     enum rio_write_type wr_type; /* preferred RIO write operation type */
0514 };
0515 
0516 static inline struct rio_mport *dma_to_mport(struct dma_device *ddev)
0517 {
0518     return container_of(ddev, struct rio_mport, dma);
0519 }
0520 #endif /* CONFIG_RAPIDIO_DMA_ENGINE */
0521 
0522 /**
0523  * struct rio_scan - RIO enumeration and discovery operations
0524  * @owner: The module owner of this structure
0525  * @enumerate: Callback to perform RapidIO fabric enumeration.
0526  * @discover: Callback to perform RapidIO fabric discovery.
0527  */
0528 struct rio_scan {
0529     struct module *owner;
0530     int (*enumerate)(struct rio_mport *mport, u32 flags);
0531     int (*discover)(struct rio_mport *mport, u32 flags);
0532 };
0533 
0534 /**
0535  * struct rio_scan_node - list node to register RapidIO enumeration and
0536  * discovery methods with RapidIO core.
0537  * @mport_id: ID of an mport (net) serviced by this enumerator
0538  * @node: node in global list of registered enumerators
0539  * @ops: RIO enumeration and discovery operations
0540  */
0541 struct rio_scan_node {
0542     int mport_id;
0543     struct list_head node;
0544     struct rio_scan *ops;
0545 };
0546 
0547 /* Architecture and hardware-specific functions */
0548 extern int rio_mport_initialize(struct rio_mport *);
0549 extern int rio_register_mport(struct rio_mport *);
0550 extern int rio_unregister_mport(struct rio_mport *);
0551 extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int);
0552 extern void rio_close_inb_mbox(struct rio_mport *, int);
0553 extern int rio_open_outb_mbox(struct rio_mport *, void *, int, int);
0554 extern void rio_close_outb_mbox(struct rio_mport *, int);
0555 extern int rio_query_mport(struct rio_mport *port,
0556                struct rio_mport_attr *mport_attr);
0557 
0558 #endif              /* LINUX_RIO_H */