QDMA Linux Driver Exported APIs¶
Xilinx QDMA Library Interface Definitions
Header file libqdma_export.h defines data structures and function signatures exported by Xilinx QDMA(libqdma) Library. libqdma is part of Xilinx QDMA Linux Driver.
-
enum
qdma_error_codes
¶ List of QDMA error codes
Constants
QDMA_OPERATION_SUCCESSFUL
- QDMA driver API operation successful
QDMA_ERR_PCI_DEVICE_NOT_FOUND
- not found on the PCIe bus
QDMA_ERR_PCI_DEVICE_ALREADY_ATTACHED
- device already attached
QDMA_ERR_PCI_DEVICE_ENABLE_FAILED
- Failed to enable the PCIe device
QDMA_ERR_PCI_DEVICE_INIT_FAILED
- Failed to initialize the device
QDMA_ERR_INVALID_INPUT_PARAM
- Invalid input parameter received
QDMA_ERR_INVALID_PCI_DEV
- Invalid PCIe device
QDMA_ERR_INVALID_QIDX
- Invalid Queue ID provided as input
QDMA_ERR_INVALID_DESCQ_STATE
- Invalid descriptor queue state
QDMA_ERR_INVALID_DIRECTION
- Invalid descriptor direction provided
QDMA_ERR_DESCQ_SETUP_FAILED
- Failed to setup the descriptor queue
QDMA_ERR_DESCQ_FULL
- Descriptor queue is full
QDMA_ERR_DESCQ_IDX_ALREADY_ADDED
- Descriptor queue index is already added
QDMA_ERR_QUEUE_ALREADY_CONFIGURED
- Queue is already configured
QDMA_ERR_OUT_OF_MEMORY
- Out of memory
QDMA_ERR_INVALID_QDMA_DEVICE
- Invalid QDMA device, QDMA device
- is not yet created
QDMA_ERR_INTERFACE_NOT_ENABLED_IN_DEVICE
- The ST or MM or Both
- interface not enabled in the device
QDMA_ERR_MISSING_DEVICE_CAPABILITY
- Device capability is
- missing
Description
When libqdma APIs are invoked by application, if any error occured, the corresponding error code would be returned.
-
enum
qdma_drv_mode
¶ Indicates whether PF/VF qdma driver is loaded in poll or interrupt mode
Constants
AUTO_MODE
- auto mode decided automatically,
- mix of poll and interrupt mode
POLL_MODE
- driver is inserted in poll mode
DIRECT_INTR_MODE
- driver is inserted in direct interrupt mode
INDIRECT_INTR_MODE
- driver is inserted in
- indirect interrupt mode
LEGACY_INTR_MODE
- driver is inserted in legacy interrupt mode
Description
QDMA PF/VF drivers can be loaded in one of these modes. Mode options is exposed as a user configurable module parameter
-
struct
drv_mode_name
¶ Structure to hold the driver name and mode
Definition
struct drv_mode_name {
enum qdma_drv_mode drv_mode;
char name;
};
Members
drv_mode
- mode of the driver in which it it loaded.
name
- Driver Name
Description
QDMA PF/VF drivers can be loaded in one of these modes. This structure holds the driver mode and name of the driver
-
int
libqdma_init
(unsigned int num_threads)¶ initializes the QDMA core library
Parameters
unsigned int num_threads
- number of threads to be created each for request processing and writeback processing
Return
0: success <0: error
-
void
libqdma_exit
(void)¶ cleanup the QDMA core library before exiting
Parameters
void
- no arguments
Description
cleanup the QDMA core library before exiting
-
enum
intr_ring_size_sel
¶ qdma interrupt ring size selection
Constants
INTR_RING_SZ_4KB
- accommodates 512 entries
INTR_RING_SZ_8KB
- accommodates 1024 entries
INTR_RING_SZ_12KB
- accommodates 1536 entries
INTR_RING_SZ_16KB
- accommodates 2048 entries
INTR_RING_SZ_20KB
- accommodates 2560 entries
INTR_RING_SZ_24KB
- accommodates 3072 entries
INTR_RING_SZ_28KB
- accommodates 3584 entries
INTR_RING_SZ_32KB
- accommodates 4096 entries
Description
Each interrupt vector can be associated with 1 or more interrupt rings. The software can choose 8 different interrupt ring sizes. The ring size for each vector is programmed during interrupt context programming
-
enum
qdma_dev_qmax_state
¶
Constants
QMAX_CFG_UNCONFIGURED
- device qmax not configured
QMAX_CFG_INITIAL
- device qmax configured with
- initial default values
QMAX_CFG_USER
- device qmax configured from
- sysfs as per user choice
Description
Each PF/VF device can be configured with 0 or more number of queues. When the queue is not assigned to any device, device is in unfonfigured state. When PF/VF is instatiated, it has the default number of queues assigned and the device is in initial state. Sysfs interface enables the users to alter the default number of queues assigned to a device and it moves to user configured state.
-
QDMA_DEV_NAME_MAXLEN
()¶
Parameters
-
struct
qdma_dev_conf
¶ device qdma property.
Definition
struct qdma_dev_conf {
struct pci_dev * pdev;
unsigned short qsets_max;
unsigned short rsvd2;
u8 zerolen_dma:1;
u8 master_pf:1;
u8 isr_top_q_en:1;
u8 rsvd1:5;
u8 vf_max;
u8 intr_rngsz;
u8 msix_qvec_max;
unsigned long uld;
enum qdma_drv_mode qdma_drv_mode;
char name;
#ifdef RTL2_FEATURE_CONFIGURABLE_BAR
char bar_num_config;
char bar_num_user;
char bar_num_bypass;
#endif
char bar_num_config;
char bar_num_user;
char bar_num_bypass;
char bar_num_stm;
int qsets_base;
u32 bdf;
u32 idx;
u8 tm_mode_en;
u8 tm_one_cdh_en;
void (* fp_user_isr_handler) (unsigned long dev_hndl, unsigned long uld);
void (* fp_q_isr_top_dev) (unsigned long dev_hndl, unsigned long uld);
};
Members
pdev
- pointer to pci_dev
qsets_max
- Maximum number of queue pairs per device
rsvd2
- Reserved
zerolen_dma
- Indicates whether zero length
- DMA is allowed or not
master_pf
- Indicates whether the current pf
- is master_pf or not
isr_top_q_en
- extra handling of per descq handling in top half
- (i.e., qdma_descq.fp_descq_isr_top will be set)
rsvd1
- Reserved1
vf_max
- Maximum number of virtual functions for
- current physical function
intr_rngsz
- Interrupt ring size
msix_qvec_max
- max. of vectors used for queues.
- libqdma update w/ actual #
uld
- upper layer data, i.e. callback data
qdma_drv_mode
- qdma driver mode
name
- an unique string to identify the dev. current format: qdma[pf|vf][idx] filled in by libqdma
bar_num_config
- dma config bar #, < 0 not present
bar_num_user
- user bar
bar_num_bypass
- bypass bar
bar_num_config
- dma config bar #, < 0 not present
bar_num_user
- user bar
bar_num_bypass
- bypass bar
bar_num_stm
- STM bar, PF only
qsets_base
- queue base for this funciton
bdf
- device index
idx
- index of device in device list
tm_mode_en
- xmit in traffic manager mode
tm_one_cdh_en
- enable 1 CDH for Traffic Manager
fp_user_isr_handler
- user interrupt, if null,
- default libqdma handler is used
fp_q_isr_top_dev
- Q interrupt top,
- per-device addtional handling code
NOTE
- if any of the max requested is less than supported, the value will
- be updated
-
void
intr_legacy_init
(void)¶ legacy interrupt init
Parameters
void
- no arguments
-
int
qdma_device_open
(const char * mod_name, struct qdma_dev_conf * conf, unsigned long * dev_hndl)¶ read the pci bars and configure the fpga This API should be called from
probe()
Parameters
const char * mod_name
- the module name, used for request_irq
struct qdma_dev_conf * conf
- device configuration
unsigned long * dev_hndl
- an opaque handle for libqdma to identify the device
Description
User interrupt will not be enabled until qdma_user_isr_enable()
is called
Return
QDMA_OPERATION_SUCCESSFUL in case of success and <0 in case of error
-
void
qdma_device_close
(struct pci_dev * pdev, unsigned long dev_hndl)¶ prepare fpga for removal: disable all interrupts (users and qdma) and release all resources.This API should be called from
remove()
Parameters
struct pci_dev * pdev
- ptr to struct pci_dev
unsigned long dev_hndl
- dev_hndl retured from
qdma_device_open()
-
void
qdma_device_offline
(struct pci_dev * pdev, unsigned long dev_hndl)¶ Set the device in offline mode
Parameters
struct pci_dev * pdev
- ptr to struct pci_dev
unsigned long dev_hndl
- dev_hndl retured from
qdma_device_open()
Return
0 for success and <0 for error
-
int
qdma_device_online
(struct pci_dev * pdev, unsigned long dev_hndl)¶ Set the device in online mode and re-initialze it
Parameters
struct pci_dev * pdev
- ptr to struct pci_dev
unsigned long dev_hndl
- dev_hndl retured from
qdma_device_open()
Return
0 for success and <0 for error
-
int
qdma_device_flr_quirk_set
(struct pci_dev * pdev, unsigned long dev_hndl)¶ start pre-flr processing
Parameters
struct pci_dev * pdev
- ptr to struct pci_dev
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
Return
0 for success and <0 for error
-
int
qdma_device_flr_quirk_check
(struct pci_dev * pdev, unsigned long dev_hndl)¶ check if pre-flr processing completed
Parameters
struct pci_dev * pdev
- ptr to struct pci_dev
unsigned long dev_hndl
- dev_hndl retunred from
qdma_device_open()
Return
0 for success <0 for error
-
int
qdma_device_get_config
(unsigned long dev_hndl, struct qdma_dev_conf * conf, char * ebuf, int ebuflen)¶ retrieve the current device configuration
Parameters
unsigned long dev_hndl
- dev_hndl retunred from
qdma_device_open()
struct qdma_dev_conf * conf
- device configuration
char * ebuf
- error message buffer, can be NULL/0 (i.e., optional)
int ebuflen
- input buffer length
Return
0 for success and <0 for error
-
int
qdma_device_clear_stats
(unsigned long dev_hndl)¶ clear device statistics
Parameters
unsigned long dev_hndl
- dev_hndl retunred from
qdma_device_open()
Return
0 for success and <0 for error
-
int
qdma_device_get_mmh2c_pkts
(unsigned long dev_hndl, unsigned long long * mmh2c_pkts)¶ get mm h2c packets processed
Parameters
unsigned long dev_hndl
- dev_hndl retunred from
qdma_device_open()
unsigned long long * mmh2c_pkts
- number of mm h2c packets processed
Return
0 for success and <0 for error
-
int
qdma_device_get_mmc2h_pkts
(unsigned long dev_hndl, unsigned long long * mmc2h_pkts)¶ get mm c2h packets processed
Parameters
unsigned long dev_hndl
- dev_hndl retunred from
qdma_device_open()
unsigned long long * mmc2h_pkts
- number of mm c2h packets processed
Return
0 for success and <0 for error
-
int
qdma_device_get_sth2c_pkts
(unsigned long dev_hndl, unsigned long long * sth2c_pkts)¶ get st h2c packets processed
Parameters
unsigned long dev_hndl
- dev_hndl retunred from
qdma_device_open()
unsigned long long * sth2c_pkts
- number of st h2c packets processed
Return
0 for success and <0 for error
-
int
qdma_device_get_stc2h_pkts
(unsigned long dev_hndl, unsigned long long * stc2h_pkts)¶ get st c2h packets processed
Parameters
unsigned long dev_hndl
- dev_hndl retunred from
qdma_device_open()
unsigned long long * stc2h_pkts
- number of st c2h packets processed
Return
0 for success and <0 for error
-
int
qdma_device_set_config
(unsigned long dev_hndl, struct qdma_dev_conf * conf)¶ set the current device configuration
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
struct qdma_dev_conf * conf
- device configuration to set
Return
0 for success and <0 for error
-
int
qdma_device_sriov_config
(struct pci_dev * pdev, unsigned long dev_hndl, int num_vfs)¶ configure sriov
Parameters
struct pci_dev * pdev
- ptr to struct pci_dev
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
int num_vfs
- # of VFs to be instantiated
Return
0 for success and <0 for error
configures sriov
-
unsigned int
qdma_device_read_config_register
(unsigned long dev_hndl, unsigned int reg_addr)¶ read dma config register
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned int reg_addr
- register address
Return
value of the config register
reads dma config register
-
void
qdma_device_write_config_register
(unsigned long dev_hndl, unsigned int reg_addr, u32 value)¶ write dma config register
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned int reg_addr
- register address
u32 value
- register value to be writen
Description
writes dma config register
-
int
qdma_device_capabilities_info
(unsigned long dev_hndl, struct qdma_dev_attributes * dev_attr)¶ retrieve the capabilities of a device.
Parameters
unsigned long dev_hndl
- handle returned from
qdma_device_open()
struct qdma_dev_attributes * dev_attr
- pointer to hold all the device attributes
Return
0 for success and <0 for error
-
struct
qdma_version_info
¶ defines the per-device version information
Definition
struct qdma_version_info {
char rtl_version_str;
char vivado_release_str;
char everest_ip_str;
};
Members
rtl_version_str
- Version string
vivado_release_str
- Release string
everest_ip_str
- Everest IP version string
-
int
qdma_device_version_info
(unsigned long dev_hndl, struct qdma_version_info * version_info)¶ retrieve the RTL version , Vivado Release ID and Everest IP info
Parameters
unsigned long dev_hndl
- handle returned from
qdma_device_open()
struct qdma_version_info * version_info
- pointer to hold all the version details
Return
0 for success and <0 for error
retrieves the RTL version , Vivado Release ID and Everest IP info
-
int
qdma_software_version_info
(char * software_version)¶ retrieve the software version
Parameters
char * software_version
- A pointer to a null-terminated string
Return
0 for success and <0 for error
retrieves the software version
-
struct
global_csr_conf
¶
Definition
struct global_csr_conf {
unsigned int ring_sz;
unsigned int c2h_timer_cnt;
unsigned int c2h_cnt_th;
unsigned int c2h_buf_sz;
unsigned int wb_intvl;
};
Members
ring_sz
- Descriptor ring size ie. queue depth
c2h_timer_cnt
- C2H timer count list
c2h_cnt_th
- C2H counter threshold list
c2h_buf_sz
- C2H buffer size list
wb_intvl
- Writeback interval
-
int
qdma_global_csr_get
(unsigned long dev_hndl, u8 index, u8 count, struct global_csr_conf * csr)¶ retrieve the global csr settings
Parameters
unsigned long dev_hndl
- handle returned from
qdma_device_open()
u8 index
- Index from where the values needs to read
u8 count
- number of entries to be read
struct global_csr_conf * csr
- data structures to hold the csr values
Return
0 for success and <0 for error
retrieves the global csr settings
-
enum
cmpt_desc_sz_t
¶
Constants
CMPT_DESC_SZ_8B
- completion size 8B
CMPT_DESC_SZ_16B
- completion size 16B
CMPT_DESC_SZ_32B
- completion size 32B
CMPT_DESC_SZ_64B
- completion size 64B
-
enum
desc_sz_t
¶
Constants
DESC_SZ_8B
- descriptor size 8B
DESC_SZ_16B
- descriptor size 16B
DESC_SZ_32B
- descriptor size 32B
DESC_SZ_64B
- descriptor size 64B
-
enum
tigger_mode_t
¶
Constants
TRIG_MODE_DISABLE
- disable trigger mode
TRIG_MODE_ANY
- any trigger mode
TRIG_MODE_COUNTER
- counter trigger mode
TRIG_MODE_USER
- trigger mode of user choice
TRIG_MODE_TIMER
- timer trigger mode
TRIG_MODE_COMBO
- timer and counter combo trigger mode
-
struct
qdma_sw_sg
¶ qdma scatter gather request
Definition
struct qdma_sw_sg {
struct qdma_sw_sg * next;
struct page * pg;
unsigned int offset;
unsigned int len;
dma_addr_t dma_addr;
};
Members
next
- pointer to next page
pg
- pointer to current page
offset
- offset in current page
len
- length of the page
dma_addr
- dma address of the allocated page
-
struct
qdma_queue_conf
¶ qdma configuration parameters
Definition
struct qdma_queue_conf {
u32 qidx:24;
u32 st:1;
u32 c2h:1;
u32 pipe:1;
u32 irq_en:1;
u32 desc_rng_sz_idx:4;
u8 wb_status_en:1;
u8 cmpl_status_acc_en:1;
u8 cmpl_status_pend_chk:1;
u8 desc_bypass:1;
u8 pfetch_en:1;
u8 fetch_credit:1;
u8 st_pkt_mode:1;
u8 c2h_use_fl:1;
u8 c2h_buf_sz_idx:4;
u8 cmpl_rng_sz_idx:4;
u8 cmpl_desc_sz:2;
u8 cmpl_stat_en:1;
u8 cmpl_udd_en:1;
u8 cmpl_timer_idx:4;
u8 cmpl_cnt_th_idx:4;
u8 cmpl_trig_mode:3;
u8 cmpl_en_intr:1;
u8 sw_desc_sz:2;
u8 pfetch_bypass:1;
u8 cmpl_ovf_chk_dis:1;
u8 port_id:3;
u8 at:1;
u8 en_mm_cmpt;
u8 cdh_max;
u8 pipe_gl_max;
u8 pipe_flow_id;
u8 pipe_slr_id;
u16 pipe_tdest;
unsigned long quld;
void (* fp_descq_isr_top) (unsigned long qhndl, unsigned long quld);
int (* fp_descq_c2h_packet) (unsigned long qhndl, unsigned long quld,unsigned int len, unsigned int sgcnt, struct qdma_sw_sg *sgl, void *udd);
char name;
unsigned int rngsz;
unsigned int rngsz_cmpt;
unsigned int c2h_bufsz;
};
Members
qidx
- 0xFFFF: libqdma choose the queue idx 0 ~
- (qdma_dev_conf.qsets_max - 1) the calling function choose the
- queue idx
st
- Indicates the streaming mode
c2h
- c2h direction
pipe
- SDx only: inter-kernel communication pipe
irq_en
- poll or interrupt
desc_rng_sz_idx
- global_csr_conf.ringsz[N]
wb_status_en
- writeback enable, disabled for ST C2H
cmpl_status_acc_en
- sw context.cmpl_status_acc_en
cmpl_status_pend_chk
- sw context.cmpl_stauts_pend_chk
desc_bypass
- send descriptor to bypass out
pfetch_en
- descriptor prefetch enable control
fetch_credit
- sw context.frcd_en[32]
st_pkt_mode
- SDx only: ST packet mode
- (i.e., with TLAST to identify the packet boundary)
c2h_use_fl
- c2h use pre-alloc free list
c2h_buf_sz_idx
- global_csr_conf.c2h_buf_sz[N]
cmpl_rng_sz_idx
- global_csr_conf.ringsz[N]
cmpl_desc_sz
- C2H ST cmpt + immediate data, desc_sz_t
cmpl_stat_en
- enable status desc. for CMPT
cmpl_udd_en
- C2H Completion entry user-defined data
cmpl_timer_idx
- global_csr_conf.c2h_timer_cnt[N]
cmpl_cnt_th_idx
- global_csr_conf.c2h_cnt_th[N]
cmpl_trig_mode
- tigger_mode_t
cmpl_en_intr
- enable interrupt for CMPT
sw_desc_sz
- SW Context desc size, desc_sz_t
pfetch_bypass
- prefetch bypass en
cmpl_ovf_chk_dis
- OVF_DIS C2H ST over flow disable
port_id
- Port ID
at
- Address Translation
en_mm_cmpt
- MM Completions enabled?
cdh_max
- max 16. CDH length per packet
pipe_gl_max
- <= 7, max # gather buf. per packet
pipe_flow_id
- pipe flow id
pipe_slr_id
- pipe SLR id
pipe_tdest
- pipe route id
quld
- user provided per-Q irq handler
fp_descq_isr_top
- Q interrupt top, per-queue additional handling
- code for example, network rx napi_schedule(
Q->napi
)
fp_descq_c2h_packet
- optional rx packet handler:
- called from irq BH (i.e.:c:func:qdma_queue_service_bh())
udd: user defined data in the completion entry sgcnt / sgl: packet data in scatter-gather list
- NOTE: a. do NOT modify any field of sgl
- if zero copy, do a
get_page()
to prevent page freeing - do loop through the sgl with sg->next and stop at sgcnt. the last sg may not have sg->next = NULL
- if zero copy, do a
- Returns:
- 0 to allow libqdma free/re-task the sgl < 0, libqdma will keep the packet for processing again
A single packet could contain: in the case of c2h_udd_en = 1:
udd only (udd valid, sgcnt = 0, sgl = NULL), or udd + packdet data in the case of c2h_udd_en = 0: packet data (udd = NULL, sgcnt > 0 and sgl valid)
name
- name of the qdma device
rngsz
- ring size of the queue
rngsz_cmpt
- completion ring size of the queue
c2h_bufsz
- C2H buffer size
Description
qdma_queue_conf defines the per-dma Q property. if any of the max requested is less than supported, the value will be updated
-
int
qdma_queue_add
(unsigned long dev_hndl, struct qdma_queue_conf * qconf, unsigned long * qhndl, char * buf, int buflen)¶ add a queue
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
struct qdma_queue_conf * qconf
- queue configuration parameters
unsigned long * qhndl
- list of unsigned long values that are the opaque qhndl
char * buf
- message buffer
int buflen
- length of the input buffer
Return
0 for success and <0 for error
-
int
qdma_queue_config
(unsigned long dev_hndl, unsigned long qid, struct qdma_queue_conf * qconf, char * buf, int buflen)¶ configure the queue with qcong parameters
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long qid
- queue id
struct qdma_queue_conf * qconf
- queue configuration parameters
char * buf
- message buffer
int buflen
- length of the input buffer
Description
return 0: success return <0: error
-
int
qdma_queue_start
(unsigned long dev_hndl, unsigned long id, char * buf, int buflen)¶ start a queue (i.e, online, ready for dma)
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- the opaque qhndl
char * buf
- message buffer
int buflen
- length of the input buffer
Return
0 for success and <0 for error
-
int
qdma_queue_stop
(unsigned long dev_hndl, unsigned long id, char * buf, int buflen)¶ stop a queue (i.e., offline, NOT ready for dma)
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- the opaque qhndl
char * buf
- message buffer
int buflen
- length of the input buffer
Return
0 for success and <0 for error
-
struct
qdma_q_state
¶ display queue state in a string buffer
Definition
struct qdma_q_state {
u32 qstate;
u32 qidx:24;
u32 st:1;
u32 c2h:1;
u32 reserved:6;
};
Members
qstate
- current q state
qidx
- 0xFFFF: libqdma choose the queue idx 0 ~
- (qdma_dev_conf.qsets_max - 1) the calling function choose the
- queue idx
st
- Indicates the streaming mode
c2h
- c2h direction
reserved
- reserved
-
int
qdma_queue_prog_stm
(unsigned long dev_hndl, unsigned long id, char * buf, int buflen)¶ Program STM for queue (context, map, etc)
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- queue index
char * buf
- message buffer
int buflen
- length of the input buffer
Return
0 for success and <0 for error
-
int
qdma_queue_remove
(unsigned long dev_hndl, unsigned long id, char * buf, int buflen)¶ remove a queue
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- the opaque qhndl
char * buf
- message buffer
int buflen
- length of the input buffer
Return
0 for success and <0 for error
-
struct qdma_queue_conf *
qdma_queue_get_config
(unsigned long dev_hndl, unsigned long id, char * buf, int buflen)¶ retrieve the configuration of a queue
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- an opaque queue handle of type unsigned long
char * buf
- message buffer
int buflen
- length of the input buffer
Return
- if optional message buffer used then strlen of buf,
- otherwise QDMA_OPERATION_SUCCESSFUL and <0 for error
-
int
qdma_queue_list
(unsigned long dev_hndl, char * buf, int buflen)¶ display all configured queues in a string buffer
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
char * buf
- message buffer
int buflen
- length of the input buffer
Return
- if optional message buffer used then strlen of buf,
- otherwise QDMA_OPERATION_SUCCESSFUL and <0 for error
-
int
qdma_queue_dump
(unsigned long dev_hndl, unsigned long id, char * buf, int buflen)¶ display a queue’s state in a string buffer
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- an opaque queue handle of type unsigned long
char * buf
- message buffer
int buflen
- length of the input buffer
Return
- if optional message buffer used then strlen of buf,
- otherwise QDMA_OPERATION_SUCCESSFUL and <0 for error
-
int
qdma_queue_dump_desc
(unsigned long dev_hndl, unsigned long id, unsigned int start, unsigned int end, char * buf, int buflen)¶ display a queue’s descriptor ring from index start ~ end in a string buffer
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- an opaque queue handle of type unsigned long
unsigned int start
- start index
unsigned int end
- end index
char * buf
- message buffer
int buflen
- length of the input buffer
Return
- if optional message buffer used then strlen of buf,
- otherwise QDMA_OPERATION_SUCCESSFUL and <0 for error
-
int
qdma_queue_dump_cmpt
(unsigned long dev_hndl, unsigned long id, unsigned int start, unsigned int end, char * buf, int buflen)¶ display a queue’s descriptor ring from index start ~ end in a string buffer
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- an opaque queue handle of type unsigned long
unsigned int start
- start index
unsigned int end
- end index
char * buf
- message buffer
int buflen
- length of the input buffer
Return
- if optional message buffer used then strlen of buf,
- otherwise QDMA_OPERATION_SUCCESSFUL and <0 for error
-
int
qdma_queue_set_err_induction
(unsigned long dev_hndl, unsigned long id, u32 err, char * buf, int buflen)¶ Induce the error
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long id
- error id
u32 err
- error info
char * buf
- message buffer
int buflen
- length of the input buffer
Return
- if optional message buffer used then strlen of buf,
- otherwise QDMA_OPERATION_SUCCESSFUL and <0 for error
-
struct
qdma_request
¶ qdma request for read or write
Definition
struct qdma_request {
unsigned char opaque;
unsigned long uld_data;
int (* fp_done) (struct qdma_request *req, unsigned int bytes_done, int err);
unsigned int timeout_ms;
unsigned int count;
u64 ep_addr;
u8 no_memcpy:1;
u8 write:1;
u8 dma_mapped:1;
u8 h2c_eot:1;
u8 udd_len;
unsigned int sgcnt;
struct qdma_sw_sg * sgl;
u8 udd;
};
Members
opaque
- private to the dma driver, do NOT touch
uld_data
- filled in by the calling function
- for the calling function
fp_done
- set fp_done for non-blocking mode
timeout_ms
- timeout in mili-seconds, 0 - no timeout
count
- total data size
ep_addr
- MM only, DDR/BRAM memory addr
no_memcpy
- flag to indicate if memcpy is required
write
- if write to the device
dma_mapped
- if sgt is already dma mapped
h2c_eot
- user defined data present
udd_len
- indicates end of transfer towards user kernel
sgcnt
- # of scatter-gather entries < 64K
sgl
- scatter-gather list of data bufs
udd
- udd data
-
ssize_t
qdma_request_submit
(unsigned long dev_hndl, unsigned long id, struct qdma_request * req)¶ submit a scatter-gather list of data for dma operation (for both read and write)
Parameters
unsigned long dev_hndl
- hndl returned from
qdma_device_open()
unsigned long id
- queue index
struct qdma_request * req
- qdma request
Return
# of bytes transferred for success and <0 for error
-
ssize_t
qdma_batch_request_submit
(unsigned long dev_hndl, unsigned long id, unsigned long count, struct qdma_request ** reqv)¶ submit a scatter-gather list of data for dma operation (for both read and write)
Parameters
unsigned long dev_hndl
- hndl returned from
qdma_device_open()
unsigned long id
- queue index
unsigned long count
- number of requests
struct qdma_request ** reqv
- qdma request
Return
# of bytes transferred for success and <0 for error
-
int
qdma_queue_c2h_peek
(unsigned long dev_hndl, unsigned long qhndl, unsigned int * udd_cnt, unsigned int * pkt_cnt, unsigned int * data_len)¶ peek a receive (c2h) queue
Parameters
unsigned long dev_hndl
- hndl returned from
qdma_device_open()
unsigned long qhndl
- hndl returned from
qdma_queue_add()
unsigned int * udd_cnt
- # of udd received
unsigned int * pkt_cnt
- # of packets received
unsigned int * data_len
- # of bytes of packet data received
Description
filled in by libqdma:
Return
# of packets received in the Q or <0 for error
-
int
qdma_queue_avail_desc
(unsigned long dev_hndl, unsigned long qhndl)¶ query of # of free descriptor
Parameters
unsigned long dev_hndl
- hndl returned from
qdma_device_open()
unsigned long qhndl
- hndl returned from
qdma_queue_add()
Return
# of available desc in the queue or <0 for error
-
struct
qdma_cmpl_ctrl
¶ completion control
Definition
struct qdma_cmpl_ctrl {
u8 cnt_th_idx:4;
u8 timer_idx:4;
u8 trigger_mode:3;
u8 en_stat_desc:1;
u8 cmpl_en_intr:1;
};
Members
cnt_th_idx
- global_csr_conf.c2h_cnt_th[N]
timer_idx
- global_csr_conf.c2h_timer_cnt[N]
trigger_mode
- tigger_mode_t
en_stat_desc
- enable status desc. for CMPT
cmpl_en_intr
- enable interrupt for CMPT
-
int
qdma_queue_cmpl_ctrl
(unsigned long dev_hndl, unsigned long qhndl, struct qdma_cmpl_ctrl * cctrl, bool set)¶ read/set the c2h Q’s completion control
Parameters
unsigned long dev_hndl
- hndl returned from
qdma_device_open()
unsigned long qhndl
- hndl returned from
qdma_queue_add()
struct qdma_cmpl_ctrl * cctrl
- completion control
bool set
- read or set
Return
0 for success or <0 for error
-
int
qdma_queue_packet_read
(unsigned long dev_hndl, unsigned long qhndl, struct qdma_request * req, struct qdma_cmpl_ctrl * cctrl)¶ read rcv’ed data (ST C2H dma operation)
Parameters
unsigned long dev_hndl
- hndl returned from
qdma_device_open()
unsigned long qhndl
- hndl returned from
qdma_queue_add()
struct qdma_request * req
- pointer to the request data
struct qdma_cmpl_ctrl * cctrl
- completion control, if no change is desired, set it to NULL
Return
0 for success or <0 for error
-
int
qdma_queue_packet_write
(unsigned long dev_hndl, unsigned long qhndl, struct qdma_request * req)¶ submit data for h2c dma operation
Parameters
unsigned long dev_hndl
- hndl returned from
qdma_device_open()
unsigned long qhndl
- hndl returned from
qdma_queue_add()
struct qdma_request * req
- pointer to the list of packet data
Return
0 for success or <0 for error
-
void
qdma_queue_service
(unsigned long dev_hndl, unsigned long qhndl, int budget, bool c2h_upd_cmpl)¶ service the queue in the case of irq handler is registered by the user, the user should call
qdma_queue_service()
in its interrupt handler to service the queue
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long qhndl
- hndl returned from
qdma_queue_add()
int budget
- ST C2H only, max number of completions to be processed.
bool c2h_upd_cmpl
- flag to update the completion
-
int
qdma_intr_ring_dump
(unsigned long dev_hndl, unsigned int vector_idx, int start_idx, int end_idx, char * buf, int buflen)¶ display the interrupt ring info of a vector
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned int vector_idx
- vector number
int start_idx
- interrupt ring start idx
int end_idx
- interrupt ring end idx
char * buf
- message bufferuffer
int buflen
- length of the input buffer
Return
0 for success or <0 for error
-
int
qdma_descq_get_cmpt_udd
(unsigned long dev_hndl, unsigned long qhndl, char * buf, int buflen)¶ function to receive the user defined data
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long qhndl
- queue handle
char * buf
- message bufferuffer
int buflen
- length of the input buffer
Return
0 for success or <0 for error
-
int
qdma_descq_read_cmpt_data
(unsigned long dev_hndl, unsigned long qhndl, u32 * num_entries, u8 ** cmpt_entries, char * buf, int buflen)¶ function to receive the completion data
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
unsigned long qhndl
- queue handle
u32 * num_entries
- I/O number of entries
u8 ** cmpt_entries
- List of completion entries
char * buf
- message bufferuffer
int buflen
- length of the input buffer
Return
0 for success or <0 for error
-
int
qdma_vf_qconf
(unsigned long dev_hndl, int qmax)¶ call for VF to request qmax number of Qs
Parameters
unsigned long dev_hndl
- dev_hndl returned from
qdma_device_open()
int qmax
- number of qs requested by vf
Return
0 for success or <0 for error