AM261x MCU+ SDK  11.00.00
cil.h
Go to the documentation of this file.
1 /* ==========================================================================
2  * $File: //dwh/usb_iip/dev/software/DWC_usb3/driver/cil.h $
3  * $Revision: #40 $
4  * $Date: 2013/12/17 $
5  * $Change: 2392669 $
6  *
7  * Synopsys SS USB3 Linux Software Driver and documentation (hereinafter,
8  * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless
9  * otherwise expressly agreed to in writing between Synopsys and you.
10  *
11  * The Software IS NOT an item of Licensed Software or Licensed Product under
12  * any End User Software License Agreement or Agreement for Licensed Product
13  * with Synopsys or any supplement thereto. You are permitted to use and
14  * redistribute this Software in source and binary forms, with or without
15  * modification, provided that redistributions of source code must retain this
16  * notice. You may not view, use, disclose, copy or distribute this file or
17  * any information contained herein except pursuant to this license grant from
18  * Synopsys. If you do not agree with this notice, including the disclaimer
19  * below, then you are not authorized to use the Software.
20  *
21  * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
31  * DAMAGE.
32  * ========================================================================== */
33 
34 #ifndef _DWC_CIL_H_
35 #define _DWC_CIL_H_
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
52 extern int dwc_usb3_pcd_check_snpsid(volatile dwc_usb3_device_t *dev, u32 addr_ofs);
53 extern int dwc_usb3_pcd_common_init(volatile dwc_usb3_device_t *dev,
54  volatile u8 __iomem *base,
55  const dwc_usb3_core_params_t *core_params);
56 extern void dwc_usb3_pcd_common_remove(volatile dwc_usb3_device_t *dev);
57 extern void dwc_usb3_pcd_device_init(volatile dwc_usb3_device_t *dev, int soft_reset,
58  int restore);
59 extern void dwc_usb3_pcd_device_remove(volatile dwc_usb3_device_t *dev);
64 extern u32 dwc_usb3_pcd_get_link_state(volatile dwc_usb3_pcd_t *pcd);
65 extern void dwc_usb3_pcd_set_link_state(volatile dwc_usb3_pcd_t *pcd, u32 state);
66 extern void dwc_usb3_pcd_remote_wake(volatile dwc_usb3_pcd_t *pcd, int function);
67 extern void dwc_usb3_pcd_do_test_mode(unsigned long data);
70 /* Peripheral CIL Routines
71  *
72  * The following routines support managing the DWC_usb3 controller in
73  * peripheral mode.
74  */
75 extern void dwc_usb3_fill_desc(dwc_usb3_dma_desc_t *desc, dwc_dma_t dma_addr,
76  u32 dma_len, u32 stream, u32 type,
77  u32 ctrlbits, int own);
80 extern void dwc_usb3_enable_desc(dwc_usb3_dma_desc_t *desc);
82 extern int dwc_usb3_xmit_fn_remote_wake(volatile dwc_usb3_pcd_t *pcd, u32 intf);
83 extern int dwc_usb3_xmit_ltm(volatile dwc_usb3_pcd_t *pcd, u32 value);
84 extern int dwc_usb3_xmit_host_role_request(volatile dwc_usb3_pcd_t *pcd, u32 param);
85 extern int dwc_usb3_set_scratchpad_buf_array(volatile dwc_usb3_pcd_t *pcd,
86  dwc_dma_t dma_addr);
87 extern int dwc_usb3_flush_fifo(volatile dwc_usb3_pcd_t *pcd, u32 fifo_sel);
88 extern int dwc_usb3_dep_cfg(volatile dwc_usb3_pcd_t *pcd,
90  u32 depcfg0, u32 depcfg1,
91  u32 depcfg2);
92 extern int dwc_usb3_dep_xfercfg(volatile dwc_usb3_pcd_t *pcd,
94  u32 depstrmcfg);
95 extern u32 dwc_usb3_dep_getepstate(volatile dwc_usb3_pcd_t *pcd,
97 extern int dwc_usb3_dep_sstall(volatile dwc_usb3_pcd_t *pcd,
99 extern int dwc_usb3_dep_cstall(volatile dwc_usb3_pcd_t *pcd,
101  int clr_pend);
102 extern int dwc_usb3_dep_startxfer(volatile dwc_usb3_pcd_t *pcd,
104  dwc_dma_t dma_addr, u32 stream_or_uf);
105 extern int dwc_usb3_dep_updatexfer(volatile dwc_usb3_pcd_t *pcd,
107  u32 tri);
108 extern int dwc_usb3_dep_endxfer(volatile dwc_usb3_pcd_t *pcd,
110  u32 tri, u32 flags, void *condition);
111 #define DWC_ENDXFER_FORCE 1U
112 #define DWC_ENDXFER_NODELAY 2U
113 
114 #ifdef DWC_STAR_9000463548_WORKAROUND
115 extern int dwc_usb3_dep_endxfer_nowait(volatile dwc_usb3_pcd_t *pcd,
117  u32 tri, int flags);
118 extern int dwc_usb3_dep_wait_endxfer(volatile dwc_usb3_pcd_t *pcd,
120  void *condition);
121 #endif
122 extern int dwc_usb3_dep_startnewcfg(volatile dwc_usb3_pcd_t *pcd,
124  u32 rsrcidx);
125 extern int dwc_usb3_enable_ep(volatile dwc_usb3_pcd_t *pcd, volatile dwc_usb3_pcd_ep_t *ep);
126 extern int dwc_usb3_disable_ep(volatile dwc_usb3_pcd_t *pcd, volatile dwc_usb3_pcd_ep_t *ep);
127 extern int dwc_usb3_get_device_speed(volatile dwc_usb3_pcd_t *pcd);
128 extern int dwc_usb3_get_frame(volatile dwc_usb3_pcd_t *pcd);
129 extern void dwc_usb3_set_address(volatile dwc_usb3_pcd_t *pcd, int addr);
130 extern void dwc_usb3_ena_usb2_phy_suspend(volatile dwc_usb3_pcd_t *pcd);
131 extern void dwc_usb3_dis_usb2_phy_suspend(volatile dwc_usb3_pcd_t *pcd);
132 extern void dwc_usb3_ena_usb3_phy_suspend(volatile dwc_usb3_pcd_t *pcd);
133 extern void dwc_usb3_dis_usb3_phy_suspend(volatile dwc_usb3_pcd_t *pcd);
134 extern void dwc_usb3_accept_u1(volatile dwc_usb3_pcd_t *pcd);
135 extern void dwc_usb3_accept_u2(volatile dwc_usb3_pcd_t *pcd);
136 extern void dwc_usb3_enable_u1(volatile dwc_usb3_pcd_t *pcd);
137 extern void dwc_usb3_enable_u2(volatile dwc_usb3_pcd_t *pcd);
138 extern void dwc_usb3_disable_u1(volatile dwc_usb3_pcd_t *pcd);
139 extern void dwc_usb3_disable_u2(volatile dwc_usb3_pcd_t *pcd);
140 extern int dwc_usb3_u1_enabled(volatile dwc_usb3_pcd_t *pcd);
141 extern int dwc_usb3_u2_enabled(volatile dwc_usb3_pcd_t *pcd);
142 extern void dwc_usb3_clr_eps_enabled(volatile dwc_usb3_pcd_t *pcd);
143 
144 extern void dwc_usb3_dump_dev_registers(volatile dwc_usb3_pcd_t *pcd);
145 
146 #define dwc_usb3_is_hwo(desc) ((desc)->control & DWC_DSCCTL_HWO_BIT)
147 #define dwc_usb3_is_ioc(desc) ((desc)->control & DWC_DSCCTL_IOC_BIT)
148 
149 #define dwc_usb3_get_xfercnt(desc) \
150  ((desc)->status >> DWC_DSCSTS_XFRCNT_SHIFT & \
151  DWC_DSCSTS_XFRCNT_BITS >> DWC_DSCSTS_XFRCNT_SHIFT)
152 
153 #define dwc_usb3_get_xfersts(desc) \
154  ((desc)->status >> DWC_DSCSTS_TRBRSP_SHIFT & \
155  DWC_DSCSTS_TRBRSP_BITS >> DWC_DSCSTS_TRBRSP_SHIFT)
156 
157 #define dwc_usb3_get_xfersofn(desc) \
158  ((desc)->control >> DWC_DSCCTL_STRMID_SOFN_SHIFT & \
159  DWC_DSCCTL_STRMID_SOFN_BITS >> DWC_DSCCTL_STRMID_SOFN_SHIFT)
160 
161 #define dwc_usb3_get_eventsofn(event) \
162  ((event) >> DWC_DEPEVT_ISOC_UFRAME_NUM_SHIFT & \
163  DWC_DEPEVT_ISOC_UFRAME_NUM_BITS >> DWC_DEPEVT_ISOC_UFRAME_NUM_SHIFT)
164 
165 /* Common CIL Routines
166  */
167 extern void dwc_usb3_dump_dbgregs(volatile dwc_usb3_device_t *dev);
168 extern void dwc_usb3_dump_global_registers(volatile dwc_usb3_device_t *dev);
169 extern void dwc_usb3_set_tx_fifo_size(volatile dwc_usb3_device_t *dev, int *sz);
170 extern void dwc_usb3_set_rx_fifo_size(volatile dwc_usb3_device_t *dev, u32 size);
171 extern void dwc_usb3_init_eventbuf(volatile dwc_usb3_device_t *dev, int bufno,
172  volatile u32 *addr, u32 size, dwc_dma_t dma_addr);
173 extern void dwc_usb3_dis_flush_eventbuf_intr(volatile dwc_usb3_device_t *dev, int bufno);
176 extern int dwc_usb3_handle_event(volatile dwc_usb3_device_t *dev);
177 extern int dwc_usb3_irq(volatile dwc_usb3_device_t *dev, int irq);
178 extern int dwc_usb3_task(volatile dwc_usb3_device_t *dev);
180 
186 static __inline u32 dwc_usb3_mode(volatile dwc_usb3_device_t *dev)
187 {
188  return dwc_rd32(dev, &dev->core_global_regs->gsts) & 0x1U;
189 }
190 
196 static __inline int dwc_usb3_is_device_mode(volatile dwc_usb3_device_t *dev)
197 {
198  return dwc_usb3_mode(dev) != DWC_GSTS_HOST_MODE;
199 }
200 
206 static __inline int dwc_usb3_is_host_mode(volatile dwc_usb3_device_t *dev)
207 {
208  return dwc_usb3_mode(dev) == DWC_GSTS_HOST_MODE;
209 }
210 
211 #ifdef __cplusplus
212 }
213 #endif
214 
215 #endif /* _DWC_CIL_H_ */
dwc_usb3_pcd_get_link_state
u32 dwc_usb3_pcd_get_link_state(volatile dwc_usb3_pcd_t *pcd)
This function retrieves the current link state.
Definition: cil.c:803
dwc_usb3_dep_xfercfg
int dwc_usb3_dep_xfercfg(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg, u32 depstrmcfg)
Definition: cil.c:413
dwc_usb3_task
int dwc_usb3_task(volatile dwc_usb3_device_t *dev)
u32
unsigned int u32
Definition: os_defs.h:41
dwc_usb3_dep_startxfer
int dwc_usb3_dep_startxfer(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg, dwc_dma_t dma_addr, u32 stream_or_uf)
Definition: cil.c:513
dwc_usb3_dep_getepstate
u32 dwc_usb3_dep_getepstate(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg)
Definition: cil.c:439
dwc_usb3_accept_u1
void dwc_usb3_accept_u1(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:954
dwc_usb3_enable_u2
void dwc_usb3_enable_u2(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:996
dwc_usb3_pcd_remote_wake
void dwc_usb3_pcd_remote_wake(volatile dwc_usb3_pcd_t *pcd, int function)
This function sends a Remote Wakeup to the host.
Definition: cil.c:841
dwc_usb3_enable_common_interrupts
void dwc_usb3_enable_common_interrupts(volatile dwc_usb3_device_t *dev)
dwc_usb3_is_host_mode
static __inline int dwc_usb3_is_host_mode(volatile dwc_usb3_device_t *dev)
Definition: cil.h:206
dwc_usb3_fill_desc
void dwc_usb3_fill_desc(dwc_usb3_dma_desc_t *desc, dwc_dma_t dma_addr, u32 dma_len, u32 stream, u32 type, u32 ctrlbits, int own)
Definition: cil.c:74
dwc_usb3_dep_cfg
int dwc_usb3_dep_cfg(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg, u32 depcfg0, u32 depcfg1, u32 depcfg2)
Definition: cil.c:379
dwc_usb3_dep_endxfer
int dwc_usb3_dep_endxfer(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg, u32 tri, u32 flags, void *condition)
Definition: cil.c:581
__iomem
#define __iomem
Definition: os_defs.h:74
dwc_usb3_dep_cstall
int dwc_usb3_dep_cstall(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg, int clr_pend)
Definition: cil.c:486
dwc_usb3_ena_usb3_phy_suspend
void dwc_usb3_ena_usb3_phy_suspend(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:912
dwc_usb3_pcd_common_remove
void dwc_usb3_pcd_common_remove(volatile dwc_usb3_device_t *dev)
Definition: cil.c:1325
dwc_dma_t
unsigned long dwc_dma_t
Definition: os_defs.h:62
dwc_usb3_pcd_t
DWC_usb3 PCD Structure. This structure encapsulates the data for the dwc_usb3 PCD.
Definition: pcd.h:375
dwc_usb3_accept_u2
void dwc_usb3_accept_u2(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:968
dwc_usb3_pcd_device_remove
void dwc_usb3_pcd_device_remove(volatile dwc_usb3_device_t *dev)
This routine deinitializes the DWC_usb3 controller registers.
Definition: cil.c:2040
dwc_usb3_init_eventbuf
void dwc_usb3_init_eventbuf(volatile dwc_usb3_device_t *dev, int bufno, volatile u32 *addr, u32 size, dwc_dma_t dma_addr)
dwc_usb3_u2_enabled
int dwc_usb3_u2_enabled(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:1055
dwc_usb3_disable_u1
void dwc_usb3_disable_u1(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:1010
dwc_usb3_pcd_set_link_state
void dwc_usb3_pcd_set_link_state(volatile dwc_usb3_pcd_t *pcd, u32 state)
This function sets state of USB link.
Definition: cil.c:821
dwc_usb3_is_device_mode
static __inline int dwc_usb3_is_device_mode(volatile dwc_usb3_device_t *dev)
Definition: cil.h:196
dwc_usb3_dump_global_registers
void dwc_usb3_dump_global_registers(volatile dwc_usb3_device_t *dev)
Definition: cil.c:1401
dwc_usb3_enable_desc
void dwc_usb3_enable_desc(dwc_usb3_dma_desc_t *desc)
Definition: cil.c:129
dwc_usb3_enable_ep
int dwc_usb3_enable_ep(volatile dwc_usb3_pcd_t *pcd, volatile dwc_usb3_pcd_ep_t *ep)
Definition: cil.c:678
dwc_usb3_set_scratchpad_buf_array
int dwc_usb3_set_scratchpad_buf_array(volatile dwc_usb3_pcd_t *pcd, dwc_dma_t dma_addr)
Definition: cil.c:322
dwc_usb3_handle_event
int dwc_usb3_handle_event(volatile dwc_usb3_device_t *dev)
dwc_usb3_device_t
Definition: dev.h:49
dwc_usb3_disable_u2
void dwc_usb3_disable_u2(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:1024
dwc_usb3_start_desc_chain
void dwc_usb3_start_desc_chain(dwc_usb3_dma_desc_t *desc)
Definition: cil.c:106
dwc_usb3_dump_dbgregs
void dwc_usb3_dump_dbgregs(volatile dwc_usb3_device_t *dev)
Definition: cil.c:1364
dwc_usb3_end_desc_chain
void dwc_usb3_end_desc_chain(dwc_usb3_dma_desc_t *desc)
Definition: cil.c:118
dwc_usb3_dep_updatexfer
int dwc_usb3_dep_updatexfer(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg, u32 tri)
Definition: cil.c:557
dwc_usb3_dump_dev_registers
void dwc_usb3_dump_dev_registers(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:1452
flags
uint8_t flags
Definition: hsmclient_msg.h:2
dwc_usb3_set_rx_fifo_size
void dwc_usb3_set_rx_fifo_size(volatile dwc_usb3_device_t *dev, u32 size)
Definition: cil.c:1552
dwc_usb3_irq
int dwc_usb3_irq(volatile dwc_usb3_device_t *dev, int irq)
dwc_usb3_dep_startnewcfg
int dwc_usb3_dep_startnewcfg(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg, u32 rsrcidx)
Definition: cil.c:648
dwc_usb3_core_global_regs_t::gsts
volatile u32 gsts
Definition: hw.h:1075
dwc_usb3_dev_ep_regs_t
Definition: hw.h:1727
dwc_usb3_xmit_fn_remote_wake
int dwc_usb3_xmit_fn_remote_wake(volatile dwc_usb3_pcd_t *pcd, u32 intf)
Definition: cil.c:191
dwc_usb3_dma_desc_t
DMA Descriptor structure.
Definition: hw.h:1840
dwc_usb3_task_init
void dwc_usb3_task_init(dwc_usb3_device_t *dev)
dwc_usb3_u1_enabled
int dwc_usb3_u1_enabled(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:1039
dwc_usb3_enable_u1
void dwc_usb3_enable_u1(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:982
dwc_usb3_disable_desc
void dwc_usb3_disable_desc(dwc_usb3_dma_desc_t *desc)
Definition: cil.c:144
dwc_usb3_dis_usb2_phy_suspend
void dwc_usb3_dis_usb2_phy_suspend(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:893
dwc_usb3_pcd_device_init
void dwc_usb3_pcd_device_init(volatile dwc_usb3_device_t *dev, int soft_reset, int restore)
This routine initializes the DWC_usb3 controller registers.
Definition: cil.c:1646
dwc_usb3_set_address
void dwc_usb3_set_address(volatile dwc_usb3_pcd_t *pcd, int addr)
This function sets the Device Address.
Definition: cil.c:855
dwc_usb3_dep_sstall
int dwc_usb3_dep_sstall(volatile dwc_usb3_pcd_t *pcd, dwc_usb3_dev_ep_regs_t __iomem *ep_reg)
Definition: cil.c:465
dwc_usb3_device_t::core_global_regs
dwc_usb3_core_global_regs_t __iomem * core_global_regs
Definition: dev.h:108
dwc_usb3_get_device_speed
int dwc_usb3_get_device_speed(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:742
dwc_usb3_clr_eps_enabled
void dwc_usb3_clr_eps_enabled(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:1069
dwc_usb3_dis_usb3_phy_suspend
void dwc_usb3_dis_usb3_phy_suspend(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:933
dwc_usb3_mode
static __inline u32 dwc_usb3_mode(volatile dwc_usb3_device_t *dev)
Definition: cil.h:186
dwc_usb3_enable_device_interrupts
void dwc_usb3_enable_device_interrupts(volatile dwc_usb3_device_t *dev)
dwc_usb3_core_params_t
Definition: os_defs.h:168
dwc_usb3_xmit_host_role_request
int dwc_usb3_xmit_host_role_request(volatile dwc_usb3_pcd_t *pcd, u32 param)
dwc_usb3_flush_fifo
int dwc_usb3_flush_fifo(volatile dwc_usb3_pcd_t *pcd, u32 fifo_sel)
Definition: cil.c:349
dwc_usb3_pcd_common_init
int dwc_usb3_pcd_common_init(volatile dwc_usb3_device_t *dev, volatile u8 __iomem *base, const dwc_usb3_core_params_t *core_params)
This routine is called to initialize the DWC_usb3 CSR data structures. The register addresses in the ...
Definition: cil.c:1234
dwc_usb3_pcd_check_snpsid
int dwc_usb3_pcd_check_snpsid(volatile dwc_usb3_device_t *dev, u32 addr_ofs)
This routine ensures the device is really a DWC_usb3 controller, by reading and verifying the SNPSID ...
Definition: cil.c:1347
dwc_usb3_pcd_do_test_mode
void dwc_usb3_pcd_do_test_mode(unsigned long data)
This routine is called when the SET_FEATURE TEST_MODE Setup packet is sent from the host....
Definition: cil.c:1100
dwc_usb3_xmit_ltm
int dwc_usb3_xmit_ltm(volatile dwc_usb3_pcd_t *pcd, u32 value)
Definition: cil.c:234
DWC_GSTS_HOST_MODE
#define DWC_GSTS_HOST_MODE
Definition: hw.h:291
dwc_usb3_get_frame
int dwc_usb3_get_frame(volatile dwc_usb3_pcd_t *pcd)
Definition: cil.c:786
u8
unsigned char u8
Definition: os_defs.h:45
dwc_usb3_pcd_ep_t
PCD Endpoint structure. This structure represents an endpoint (EP) in the Peripheral Controller Drive...
Definition: pcd.h:324
dwc_usb3_ena_usb2_phy_suspend
void dwc_usb3_ena_usb2_phy_suspend(volatile dwc_usb3_pcd_t *pcd)
This function enables USB2 Phy suspend.
Definition: cil.c:870
dwc_usb3_disable_ep
int dwc_usb3_disable_ep(volatile dwc_usb3_pcd_t *pcd, volatile dwc_usb3_pcd_ep_t *ep)
Definition: cil.c:710
dwc_usb3_dis_flush_eventbuf_intr
void dwc_usb3_dis_flush_eventbuf_intr(volatile dwc_usb3_device_t *dev, int bufno)
dwc_usb3_set_tx_fifo_size
void dwc_usb3_set_tx_fifo_size(volatile dwc_usb3_device_t *dev, int *sz)
Definition: cil.c:1478