iPXE
vxge_config.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ipxe/malloc.h>
#include <ipxe/pci.h>
#include <ipxe/iobuf.h>
#include <ipxe/ethernet.h>
#include <byteswap.h>
#include "vxge_traffic.h"
#include "vxge_config.h"
#include "vxge_main.h"

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_ONLY)
void vxge_hw_vpath_set_zero_rx_frm_len (struct __vxge_hw_device *hldev)
enum vxge_hw_status vxge_hw_set_fw_api (struct __vxge_hw_device *hldev, u64 vp_id, u32 action, u32 offset, u64 data0, u64 data1)
enum vxge_hw_status vxge_hw_get_func_mode (struct __vxge_hw_device *hldev, u32 *func_mode)
void __vxge_hw_device_pci_e_init (struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_device_register_poll (void __iomem *reg, u64 mask, u32 max_millis)
enum vxge_hw_status __vxge_hw_device_vpath_reset_in_prog_check (u64 __iomem *vpath_rst_in_prog)
static struct vxge_hw_legacy_reg __iomem__vxge_hw_device_get_legacy_reg (struct pci_device *pdev, void __iomem *bar0)
struct vxge_hw_toc_reg __iomem__vxge_hw_device_toc_get (void __iomem *bar0, struct vxge_hw_legacy_reg __iomem *legacy_reg)
enum vxge_hw_status __vxge_hw_device_reg_addr_get (struct __vxge_hw_device *hldev)
static u32 __vxge_hw_device_access_rights_get (u32 host_type, u32 func_id)
void __vxge_hw_device_host_info_get (struct __vxge_hw_device *hldev)
enum vxge_hw_status vxge_hw_device_hw_info_get (struct pci_device *pdev, void __iomem *bar0, struct vxge_hw_device_hw_info *hw_info)
 vxge_hw_device_hw_info_get - Get the hw information Returns the vpath mask that has the bits set for each vpath allocated for the driver, FW version information and the first mac addresse for each vpath
enum vxge_hw_status vxge_hw_device_initialize (struct __vxge_hw_device **devh, void *bar0, struct pci_device *pdev, u8 titan1)
void vxge_hw_device_terminate (struct __vxge_hw_device *hldev)
enum vxge_hw_status vxge_hw_ring_replenish (struct __vxge_hw_ring *ring)
enum vxge_hw_status __vxge_hw_ring_create (struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_ring *ring)
enum vxge_hw_status __vxge_hw_ring_delete (struct __vxge_hw_ring *ring)
enum vxge_hw_status __vxge_hw_legacy_swapper_set (struct vxge_hw_legacy_reg __iomem *legacy_reg)
enum vxge_hw_status __vxge_hw_vpath_swapper_set (struct vxge_hw_vpath_reg __iomem *vpath_reg)
enum vxge_hw_status __vxge_hw_kdfc_swapper_set (struct vxge_hw_legacy_reg __iomem *legacy_reg, struct vxge_hw_vpath_reg __iomem *vpath_reg)
enum vxge_hw_status vxge_hw_vpath_strip_fcs_check (struct __vxge_hw_device *hldev, u64 vpath_mask)
enum vxge_hw_status __vxge_hw_fifo_create (struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_fifo *fifo)
enum vxge_hw_status __vxge_hw_fifo_delete (struct __vxge_hw_fifo *fifo)
enum vxge_hw_status __vxge_hw_vpath_pci_read (struct __vxge_hw_virtualpath *vpath, u32 phy_func_0, u32 offset, u32 *val)
u32 __vxge_hw_vpath_func_id_get (struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg)
static void __vxge_hw_read_rts_ds (struct vxge_hw_vpath_reg __iomem *vpath_reg, u64 dta_struct_sel)
enum vxge_hw_status __vxge_hw_vpath_card_info_get (struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_fw_ver_get (struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_addr_get (struct vxge_hw_vpath_reg *vpath_reg, u8(macaddr)[ETH_ALEN], u8(macaddr_mask)[ETH_ALEN])
static enum vxge_hw_status __vxge_hw_vpath_mgmt_read (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_vpath_reset_check (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_vpath_reset (struct __vxge_hw_device *hldev, u32 vp_id)
void __vxge_hw_vpath_prc_configure (struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_vpath_kdfc_configure (struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_mac_configure (struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_vpath_tim_configure (struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_initialize (struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vp_initialize (struct __vxge_hw_device *hldev, u32 vp_id, struct __vxge_hw_virtualpath *vpath)
void __vxge_hw_vp_terminate (struct __vxge_hw_device *hldev, struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_mtu_set (struct __vxge_hw_virtualpath *vpath, u32 new_mtu)
enum vxge_hw_status vxge_hw_vpath_open (struct __vxge_hw_device *hldev, struct vxge_vpath *vpath)
void vxge_hw_vpath_rx_doorbell_init (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_close (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_reset (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_recover_from_reset (struct __vxge_hw_virtualpath *vpath)
void vxge_hw_vpath_enable (struct __vxge_hw_virtualpath *vpath)

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_ONLY )

◆ vxge_hw_vpath_set_zero_rx_frm_len()

void vxge_hw_vpath_set_zero_rx_frm_len ( struct __vxge_hw_device * hldev)

Definition at line 31 of file vxge_config.c.

32{
33 u64 val64;
34 struct __vxge_hw_virtualpath *vpath;
35 struct vxge_hw_vpath_reg __iomem *vp_reg;
36
37 vpath = &hldev->virtual_path;
38 vp_reg = vpath->vp_reg;
39
40 val64 = readq(&vp_reg->rxmac_vcfg0);
42 writeq(val64, &vp_reg->rxmac_vcfg0);
43 val64 = readq(&vp_reg->rxmac_vcfg0);
44 return;
45}
#define __iomem
Definition igbvf_osdep.h:46
#define readq(io_addr)
Definition io.h:234
#define writeq(data, io_addr)
Definition io.h:273
uint64_t u64
Definition stdint.h:26
struct __vxge_hw_virtualpath virtual_path
struct vxge_hw_vpath_reg * vp_reg
#define VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN(val)
Definition vxge_reg.h:4193

References __iomem, readq, vxge_hw_vpath_reg::rxmac_vcfg0, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN, and writeq.

Referenced by vxge_close().

◆ vxge_hw_set_fw_api()

enum vxge_hw_status vxge_hw_set_fw_api ( struct __vxge_hw_device * hldev,
u64 vp_id,
u32 action,
u32 offset,
u64 data0,
u64 data1 )

Definition at line 48 of file vxge_config.c.

54{
56 u64 val64;
58
59 struct vxge_hw_vpath_reg __iomem *vp_reg;
60
61 vp_reg = (struct vxge_hw_vpath_reg __iomem *)hldev->vpath_reg[vp_id];
62
63 writeq(data0, &vp_reg->rts_access_steer_data0);
64 writeq(data1, &vp_reg->rts_access_steer_data1);
65
66 wmb();
67
72
73 writeq(val64, &vp_reg->rts_access_steer_ctrl);
74
75 wmb();
76
78 &vp_reg->rts_access_steer_ctrl,
82
83 if (status != VXGE_HW_OK)
84 return VXGE_HW_FAIL;
85
86 val64 = readq(&vp_reg->rts_access_steer_ctrl);
87
90 else
92
93 return status;
94}
u32 data1
Definition ar9003_mac.h:4
u32 data0
Definition ar9003_mac.h:2
uint16_t offset
Offset to command line.
Definition bzimage.h:3
uint8_t status
Status.
Definition ena.h:5
#define wmb()
Definition io.h:546
struct vxge_hw_vpath_reg * vpath_reg[VXGE_HW_TITAN_VPATH_REG_SPACES]
#define u32
Definition vga.h:21
enum vxge_hw_status __vxge_hw_device_register_poll(void __iomem *reg, u64 mask, u32 max_millis)
#define WAIT_FACTOR
Definition vxge_config.h:28
vxge_hw_status
Definition vxge_config.h:70
@ VXGE_HW_FAIL
Definition vxge_config.h:72
@ VXGE_HW_OK
Definition vxge_config.h:71
#define VXGE_HW_DEF_DEVICE_POLL_MILLIS
Definition vxge_config.h:67
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL(val)
Definition vxge_reg.h:4206
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET(val)
Definition vxge_reg.h:4211
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE
Definition vxge_reg.h:4207
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO
Definition vxge_reg.h:204
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS
Definition vxge_reg.h:4210
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION(val)
Definition vxge_reg.h:4205

References __iomem, __vxge_hw_device_register_poll(), data0, data1, offset, readq, vxge_hw_vpath_reg::rts_access_steer_ctrl, vxge_hw_vpath_reg::rts_access_steer_data0, vxge_hw_vpath_reg::rts_access_steer_data1, status, u32, __vxge_hw_device::vpath_reg, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, WAIT_FACTOR, wmb, and writeq.

Referenced by vxge_hw_get_func_mode().

◆ vxge_hw_get_func_mode()

enum vxge_hw_status vxge_hw_get_func_mode ( struct __vxge_hw_device * hldev,
u32 * func_mode )

Definition at line 98 of file vxge_config.c.

99{
101 struct vxge_hw_vpath_reg __iomem *vp_reg;
102 u64 val64;
103 int vp_id;
104
105 /* get the first vpath number assigned to this function */
106 vp_id = hldev->first_vp_id;
107
108 vp_reg = (struct vxge_hw_vpath_reg __iomem *)hldev->vpath_reg[vp_id];
109
110 status = vxge_hw_set_fw_api(hldev, vp_id,
112
113 if (status == VXGE_HW_OK) {
114 val64 = readq(&vp_reg->rts_access_steer_data0);
115 *func_mode = VXGE_HW_GET_FUNC_MODE_VAL(val64);
116 }
117
118 return status;
119}
enum vxge_hw_status vxge_hw_set_fw_api(struct __vxge_hw_device *hldev, u64 vp_id, u32 action, u32 offset, u64 data0, u64 data1)
Definition vxge_config.c:48
#define VXGE_HW_FW_API_GET_FUNC_MODE
Definition vxge_reg.h:65
#define VXGE_HW_GET_FUNC_MODE_VAL(val)
Definition vxge_reg.h:67

References __iomem, __vxge_hw_device::first_vp_id, readq, vxge_hw_vpath_reg::rts_access_steer_data0, status, u32, __vxge_hw_device::vpath_reg, VXGE_HW_FW_API_GET_FUNC_MODE, VXGE_HW_GET_FUNC_MODE_VAL, VXGE_HW_OK, and vxge_hw_set_fw_api().

Referenced by vxge_probe().

◆ __vxge_hw_device_pci_e_init()

void __vxge_hw_device_pci_e_init ( struct __vxge_hw_device * hldev)

Definition at line 127 of file vxge_config.c.

128{
129 u16 cmd = 0;
130 struct pci_device *pdev = hldev->pdev;
131
132 vxge_trace();
133
134 /* Set the PErr Repconse bit and SERR in PCI command register. */
136 cmd |= 0x140;
138
139 return;
140}
struct golan_eqe_cmd cmd
Definition CIB_PRM.h:1
int pci_read_config_word(struct pci_device *pci, unsigned int where, uint16_t *value)
Read 16-bit word from PCI configuration space.
int pci_write_config_word(struct pci_device *pci, unsigned int where, uint16_t value)
Write 16-bit word to PCI configuration space.
#define PCI_COMMAND
PCI command.
Definition pci.h:26
struct pci_device * pdev
A PCI device.
Definition pci.h:211
#define u16
Definition vga.h:20
#define vxge_trace()

References cmd, PCI_COMMAND, pci_read_config_word(), pci_write_config_word(), __vxge_hw_device::pdev, u16, and vxge_trace.

Referenced by vxge_hw_device_initialize().

◆ __vxge_hw_device_register_poll()

enum vxge_hw_status __vxge_hw_device_register_poll ( void __iomem * reg,
u64 mask,
u32 max_millis )

Definition at line 148 of file vxge_config.c.

149{
150 u64 val64;
151 u32 i = 0;
152 enum vxge_hw_status ret = VXGE_HW_FAIL;
153
154 udelay(10);
155
156 do {
157 val64 = readq(reg);
158 if (!(val64 & mask))
159 return VXGE_HW_OK;
160 udelay(100);
161 } while (++i <= 9);
162
163 i = 0;
164 do {
165 val64 = readq(reg);
166 if (!(val64 & mask))
167 return VXGE_HW_OK;
168 udelay(1000);
169 } while (++i <= max_millis);
170
171 return ret;
172}
static unsigned int unsigned int reg
Definition myson.h:162
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition timer.c:61

References __iomem, readq, reg, u32, udelay(), VXGE_HW_FAIL, and VXGE_HW_OK.

Referenced by __vxge_hw_device_vpath_reset_in_prog_check(), __vxge_hw_pio_mem_write64(), __vxge_hw_vpath_pci_read(), __vxge_hw_vpath_reset_check(), and vxge_hw_set_fw_api().

◆ __vxge_hw_device_vpath_reset_in_prog_check()

enum vxge_hw_status __vxge_hw_device_vpath_reset_in_prog_check ( u64 __iomem * vpath_rst_in_prog)

◆ __vxge_hw_device_get_legacy_reg()

struct vxge_hw_legacy_reg __iomem * __vxge_hw_device_get_legacy_reg ( struct pci_device * pdev,
void __iomem * bar0 )
static

Definition at line 197 of file vxge_config.c.

198{
200 struct vxge_hw_legacy_reg __iomem *legacy_reg;
201 /*
202 * If the length of Bar0 is 16MB, then assume that we are configured
203 * in MF8P_VP2 mode and then add 8MB to the legacy_reg offsets
204 */
205 if (pci_bar_size(pdev, PCI_BASE_ADDRESS_0) == 0x1000000)
206 legacy_reg = (struct vxge_hw_legacy_reg __iomem *)
207 (bar0 + 0x800000);
208 else
209 legacy_reg = (struct vxge_hw_legacy_reg __iomem *)bar0;
210
212 if (status != VXGE_HW_OK)
213 return NULL;
214
215 return legacy_reg;
216}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
unsigned long pci_bar_size(struct pci_device *pci, unsigned int reg)
Get the size of a PCI BAR.
Definition pci.c:164
#define PCI_BASE_ADDRESS_0
Definition pci.h:63
enum vxge_hw_status __vxge_hw_legacy_swapper_set(struct vxge_hw_legacy_reg __iomem *legacy_reg)

References __iomem, __vxge_hw_legacy_swapper_set(), NULL, pci_bar_size(), PCI_BASE_ADDRESS_0, status, and VXGE_HW_OK.

Referenced by __vxge_hw_device_reg_addr_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_device_toc_get()

struct vxge_hw_toc_reg __iomem * __vxge_hw_device_toc_get ( void __iomem * bar0,
struct vxge_hw_legacy_reg __iomem * legacy_reg )

Definition at line 223 of file vxge_config.c.

225{
226 u64 val64;
227 struct vxge_hw_toc_reg __iomem *toc = NULL;
228
229 val64 = readq(&legacy_reg->toc_first_pointer);
230 toc = (struct vxge_hw_toc_reg __iomem *)(bar0+val64);
231
232 return toc;
233}

References __iomem, NULL, and readq.

Referenced by __vxge_hw_device_reg_addr_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_device_reg_addr_get()

enum vxge_hw_status __vxge_hw_device_reg_addr_get ( struct __vxge_hw_device * hldev)

Definition at line 242 of file vxge_config.c.

243{
244 u64 val64;
245 u32 i;
247
249 hldev->bar0);
250 if (hldev->legacy_reg == NULL) {
252 goto exit;
253 }
254
255 hldev->toc_reg = __vxge_hw_device_toc_get(hldev->bar0,
256 hldev->legacy_reg);
257 if (hldev->toc_reg == NULL) {
259 goto exit;
260 }
261
262 val64 = readq(&hldev->toc_reg->toc_common_pointer);
263 hldev->common_reg =
264 (struct vxge_hw_common_reg __iomem *)(hldev->bar0 + val64);
265
266 val64 = readq(&hldev->toc_reg->toc_mrpcim_pointer);
267 hldev->mrpcim_reg =
268 (struct vxge_hw_mrpcim_reg __iomem *)(hldev->bar0 + val64);
269
270 for (i = 0; i < VXGE_HW_TITAN_SRPCIM_REG_SPACES; i++) {
271 val64 = readq(&hldev->toc_reg->toc_srpcim_pointer[i]);
272 hldev->srpcim_reg[i] =
273 (struct vxge_hw_srpcim_reg __iomem *)
274 (hldev->bar0 + val64);
275 }
276
277 for (i = 0; i < VXGE_HW_TITAN_VPMGMT_REG_SPACES; i++) {
278 val64 = readq(&hldev->toc_reg->toc_vpmgmt_pointer[i]);
279 hldev->vpmgmt_reg[i] =
280 (struct vxge_hw_vpmgmt_reg __iomem *)(hldev->bar0 + val64);
281 }
282
283 for (i = 0; i < VXGE_HW_TITAN_VPATH_REG_SPACES; i++) {
284 val64 = readq(&hldev->toc_reg->toc_vpath_pointer[i]);
285 hldev->vpath_reg[i] =
286 (struct vxge_hw_vpath_reg __iomem *)
287 (hldev->bar0 + val64);
288 }
289
290 val64 = readq(&hldev->toc_reg->toc_kdfc);
291
292 switch (VXGE_HW_TOC_GET_KDFC_INITIAL_BIR(val64)) {
293 case 0:
294 hldev->kdfc = (u8 __iomem *)(hldev->bar0 +
296 break;
297 default:
298 break;
299 }
300
303exit:
304 return status;
305}
#define u8
Definition igbvf_osdep.h:40
struct vxge_hw_srpcim_reg * srpcim_reg[VXGE_HW_TITAN_SRPCIM_REG_SPACES]
struct vxge_hw_toc_reg * toc_reg
struct vxge_hw_common_reg * common_reg
struct vxge_hw_mrpcim_reg * mrpcim_reg
struct vxge_hw_legacy_reg * legacy_reg
struct vxge_hw_vpmgmt_reg * vpmgmt_reg[VXGE_HW_TITAN_VPMGMT_REG_SPACES]
void __iomem * bar0
u64 toc_mrpcim_pointer
Definition vxge_reg.h:677
u64 toc_common_pointer
Definition vxge_reg.h:669
u64 toc_vpath_pointer[17]
Definition vxge_reg.h:687
u64 toc_vpmgmt_pointer[17]
Definition vxge_reg.h:683
u64 toc_srpcim_pointer[17]
Definition vxge_reg.h:679
struct vxge_hw_toc_reg __iomem * __vxge_hw_device_toc_get(void __iomem *bar0, struct vxge_hw_legacy_reg __iomem *legacy_reg)
static struct vxge_hw_legacy_reg __iomem * __vxge_hw_device_get_legacy_reg(struct pci_device *pdev, void __iomem *bar0)
enum vxge_hw_status __vxge_hw_device_vpath_reset_in_prog_check(u64 __iomem *vpath_rst_in_prog)
#define VXGE_HW_TOC_GET_KDFC_INITIAL_OFFSET(val)
Definition vxge_reg.h:115
#define VXGE_HW_TITAN_VPATH_REG_SPACES
Definition vxge_reg.h:54
#define VXGE_HW_TITAN_VPMGMT_REG_SPACES
Definition vxge_reg.h:53
#define VXGE_HW_TITAN_SRPCIM_REG_SPACES
Definition vxge_reg.h:52
#define VXGE_HW_TOC_GET_KDFC_INITIAL_BIR(val)
Definition vxge_reg.h:117

References __iomem, __vxge_hw_device_get_legacy_reg(), __vxge_hw_device_toc_get(), __vxge_hw_device_vpath_reset_in_prog_check(), __vxge_hw_device::bar0, __vxge_hw_device::common_reg, __vxge_hw_device::kdfc, __vxge_hw_device::legacy_reg, __vxge_hw_device::mrpcim_reg, NULL, __vxge_hw_device::pdev, readq, __vxge_hw_device::srpcim_reg, status, vxge_hw_toc_reg::toc_common_pointer, vxge_hw_toc_reg::toc_kdfc, vxge_hw_toc_reg::toc_mrpcim_pointer, __vxge_hw_device::toc_reg, vxge_hw_toc_reg::toc_srpcim_pointer, vxge_hw_toc_reg::toc_vpath_pointer, vxge_hw_toc_reg::toc_vpmgmt_pointer, u32, u8, __vxge_hw_device::vpath_reg, vxge_hw_common_reg::vpath_rst_in_prog, __vxge_hw_device::vpmgmt_reg, VXGE_HW_FAIL, VXGE_HW_OK, VXGE_HW_TITAN_SRPCIM_REG_SPACES, VXGE_HW_TITAN_VPATH_REG_SPACES, VXGE_HW_TITAN_VPMGMT_REG_SPACES, VXGE_HW_TOC_GET_KDFC_INITIAL_BIR, and VXGE_HW_TOC_GET_KDFC_INITIAL_OFFSET.

Referenced by vxge_hw_device_initialize().

◆ __vxge_hw_device_access_rights_get()

u32 __vxge_hw_device_access_rights_get ( u32 host_type,
u32 func_id )
static

Definition at line 312 of file vxge_config.c.

313{
315
316 switch (host_type) {
318 if (func_id == 0) {
319 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
321 }
322 break;
324 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
326 break;
328 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
330 break;
334 break;
337 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM;
338 break;
339 }
340
341 return access_rights;
342}
__be16 func_id
Definition CIB_PRM.h:2
#define VXGE_HW_NO_MR_SR_VH0_FUNCTION0
#define VXGE_HW_VH_NORMAL_FUNCTION
#define VXGE_HW_MR_SR_VH0_INVALID_CONFIG
#define VXGE_HW_DEVICE_ACCESS_RIGHT_VPATH
#define VXGE_HW_SR_VH_VIRTUAL_FUNCTION
#define VXGE_HW_NO_MR_SR_VH0_VIRTUAL_FUNCTION
#define VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION
#define VXGE_HW_MR_NO_SR_VH0_BASE_FUNCTION
#define VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM
#define VXGE_HW_SR_VH_FUNCTION0
#define VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM

References func_id, u32, VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM, VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM, VXGE_HW_DEVICE_ACCESS_RIGHT_VPATH, VXGE_HW_MR_NO_SR_VH0_BASE_FUNCTION, VXGE_HW_MR_SR_VH0_INVALID_CONFIG, VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION, VXGE_HW_NO_MR_SR_VH0_FUNCTION0, VXGE_HW_NO_MR_SR_VH0_VIRTUAL_FUNCTION, VXGE_HW_SR_VH_FUNCTION0, VXGE_HW_SR_VH_VIRTUAL_FUNCTION, and VXGE_HW_VH_NORMAL_FUNCTION.

Referenced by __vxge_hw_device_host_info_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_device_host_info_get()

void __vxge_hw_device_host_info_get ( struct __vxge_hw_device * hldev)

Definition at line 348 of file vxge_config.c.

349{
350 u64 val64;
351 u32 i;
352
353 val64 = readq(&hldev->common_reg->host_type_assignments);
354
355 hldev->host_type =
357
359
360 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
361
362 if (!(hldev->vpath_assignments & vxge_mBIT(i)))
363 continue;
364
365 hldev->func_id =
367
369 hldev->host_type, hldev->func_id);
370
371 hldev->first_vp_id = i;
372 break;
373 }
374
375 return;
376}
static u32 __vxge_hw_device_access_rights_get(u32 host_type, u32 func_id)
u32 __vxge_hw_vpath_func_id_get(struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg)
#define VXGE_HW_HOST_TYPE_ASSIGNMENTS_GET_HOST_TYPE_ASSIGNMENTS(bits)
Definition vxge_reg.h:47
#define vxge_mBIT(loc)
Definition vxge_reg.h:24
#define VXGE_HW_MAX_VIRTUAL_PATHS

References __vxge_hw_device_access_rights_get(), __vxge_hw_vpath_func_id_get(), __vxge_hw_device::access_rights, __vxge_hw_device::common_reg, __vxge_hw_device::first_vp_id, __vxge_hw_device::func_id, __vxge_hw_device::host_type, vxge_hw_common_reg::host_type_assignments, readq, u32, __vxge_hw_device::vpath_assignments, vxge_hw_common_reg::vpath_assignments, __vxge_hw_device::vpmgmt_reg, VXGE_HW_HOST_TYPE_ASSIGNMENTS_GET_HOST_TYPE_ASSIGNMENTS, VXGE_HW_MAX_VIRTUAL_PATHS, and vxge_mBIT.

Referenced by vxge_hw_device_initialize().

◆ vxge_hw_device_hw_info_get()

enum vxge_hw_status vxge_hw_device_hw_info_get ( struct pci_device * pdev,
void __iomem * bar0,
struct vxge_hw_device_hw_info * hw_info )

vxge_hw_device_hw_info_get - Get the hw information Returns the vpath mask that has the bits set for each vpath allocated for the driver, FW version information and the first mac addresse for each vpath

Definition at line 385 of file vxge_config.c.

387{
388 u32 i;
389 u64 val64;
390 struct vxge_hw_toc_reg __iomem *toc;
391 struct vxge_hw_mrpcim_reg __iomem *mrpcim_reg;
392 struct vxge_hw_common_reg __iomem *common_reg;
393 struct vxge_hw_vpath_reg __iomem *vpath_reg;
394 struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg;
395 struct vxge_hw_legacy_reg __iomem *legacy_reg;
397
398 vxge_trace();
399
400 memset(hw_info, 0, sizeof(struct vxge_hw_device_hw_info));
401
402 legacy_reg = __vxge_hw_device_get_legacy_reg(pdev, bar0);
403 if (legacy_reg == NULL) {
405 goto exit;
406 }
407
408 toc = __vxge_hw_device_toc_get(bar0, legacy_reg);
409 if (toc == NULL) {
411 goto exit;
412 }
413
414 val64 = readq(&toc->toc_common_pointer);
415 common_reg = (struct vxge_hw_common_reg __iomem *)(bar0 + val64);
416
418 (u64 __iomem *)&common_reg->vpath_rst_in_prog);
419 if (status != VXGE_HW_OK)
420 goto exit;
421
422 hw_info->vpath_mask = readq(&common_reg->vpath_assignments);
423
424 val64 = readq(&common_reg->host_type_assignments);
425
426 hw_info->host_type =
428
429 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
430
431 if (!((hw_info->vpath_mask) & vxge_mBIT(i)))
432 continue;
433
434 val64 = readq(&toc->toc_vpmgmt_pointer[i]);
435
436 vpmgmt_reg = (struct vxge_hw_vpmgmt_reg __iomem *)
437 (bar0 + val64);
438
439 hw_info->func_id = __vxge_hw_vpath_func_id_get(vpmgmt_reg);
441 hw_info->func_id) &
443
444 val64 = readq(&toc->toc_mrpcim_pointer);
445
446 mrpcim_reg = (struct vxge_hw_mrpcim_reg __iomem *)
447 (bar0 + val64);
448
449 writeq(0, &mrpcim_reg->xgmac_gen_fw_memo_mask);
450 wmb();
451 }
452
453 val64 = readq(&toc->toc_vpath_pointer[i]);
454
455 vpath_reg = (struct vxge_hw_vpath_reg __iomem *)(bar0 + val64);
456
457 status = __vxge_hw_vpath_fw_ver_get(vpath_reg, hw_info);
458 if (status != VXGE_HW_OK)
459 goto exit;
460
461 status = __vxge_hw_vpath_card_info_get(vpath_reg, hw_info);
462 if (status != VXGE_HW_OK)
463 goto exit;
464
465 break;
466 }
467
468 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
469
470 if (!((hw_info->vpath_mask) & vxge_mBIT(i)))
471 continue;
472
473 val64 = readq(&toc->toc_vpath_pointer[i]);
474 vpath_reg = (struct vxge_hw_vpath_reg __iomem *)(bar0 + val64);
475
477 hw_info->mac_addrs[i],
478 hw_info->mac_addr_masks[i]);
479 if (status != VXGE_HW_OK)
480 goto exit;
481 }
482exit:
483 return status;
484}
void * memset(void *dest, int character, size_t len) __nonnull
struct vxge_hw_device_hw_info - Device information @host_type: Host Type @func_id: Function Id @vpath...
enum vxge_hw_status __vxge_hw_vpath_card_info_get(struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_fw_ver_get(struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_addr_get(struct vxge_hw_vpath_reg *vpath_reg, u8(macaddr)[ETH_ALEN], u8(macaddr_mask)[ETH_ALEN])
@ VXGE_HW_ERR_CRITICAL

References __iomem, __vxge_hw_device_access_rights_get(), __vxge_hw_device_get_legacy_reg(), __vxge_hw_device_toc_get(), __vxge_hw_device_vpath_reset_in_prog_check(), __vxge_hw_vpath_addr_get(), __vxge_hw_vpath_card_info_get(), __vxge_hw_vpath_func_id_get(), __vxge_hw_vpath_fw_ver_get(), vxge_hw_device_hw_info::func_id, vxge_hw_device_hw_info::host_type, vxge_hw_common_reg::host_type_assignments, memset(), NULL, readq, status, vxge_hw_toc_reg::toc_common_pointer, vxge_hw_toc_reg::toc_mrpcim_pointer, vxge_hw_toc_reg::toc_vpath_pointer, vxge_hw_toc_reg::toc_vpmgmt_pointer, u32, vxge_hw_common_reg::vpath_assignments, vxge_hw_device_hw_info::vpath_mask, vxge_hw_common_reg::vpath_rst_in_prog, VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM, VXGE_HW_ERR_CRITICAL, VXGE_HW_HOST_TYPE_ASSIGNMENTS_GET_HOST_TYPE_ASSIGNMENTS, VXGE_HW_MAX_VIRTUAL_PATHS, VXGE_HW_OK, vxge_mBIT, vxge_trace, wmb, writeq, and vxge_hw_mrpcim_reg::xgmac_gen_fw_memo_mask.

Referenced by vxge_probe().

◆ vxge_hw_device_initialize()

enum vxge_hw_status vxge_hw_device_initialize ( struct __vxge_hw_device ** devh,
void * bar0,
struct pci_device * pdev,
u8 titan1 )

Definition at line 496 of file vxge_config.c.

501{
502 struct __vxge_hw_device *hldev = NULL;
504
505 vxge_trace();
506
507 hldev = (struct __vxge_hw_device *)
508 zalloc(sizeof(struct __vxge_hw_device));
509 if (hldev == NULL) {
510 vxge_debug(VXGE_ERR, "hldev allocation failed\n");
512 goto exit;
513 }
514
516
517 hldev->bar0 = bar0;
518 hldev->pdev = pdev;
519 hldev->titan1 = titan1;
520
522
524 if (status != VXGE_HW_OK) {
525 vxge_debug(VXGE_ERR, "%s:%d __vxge_hw_device_reg_addr_get "
526 "failed\n", __func__, __LINE__);
528 goto exit;
529 }
530
532
533 *devh = hldev;
534exit:
535 return status;
536}
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:662
struct __vxge_hw_device - Hal device object @magic: Magic Number @bar0: BAR0 virtual address.
void vxge_hw_device_terminate(struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_device_reg_addr_get(struct __vxge_hw_device *hldev)
void __vxge_hw_device_host_info_get(struct __vxge_hw_device *hldev)
void __vxge_hw_device_pci_e_init(struct __vxge_hw_device *hldev)
#define vxge_debug(mask, fmt...)
#define VXGE_ERR
Definition vxge_config.h:54
@ VXGE_HW_ERR_OUT_OF_MEMORY
Definition vxge_config.h:85
#define VXGE_HW_DEVICE_MAGIC

References __vxge_hw_device_host_info_get(), __vxge_hw_device_pci_e_init(), __vxge_hw_device_reg_addr_get(), __vxge_hw_device::bar0, __vxge_hw_device::magic, NULL, __vxge_hw_device::pdev, status, __vxge_hw_device::titan1, u8, vxge_debug, VXGE_ERR, VXGE_HW_DEVICE_MAGIC, vxge_hw_device_terminate(), VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_OK, vxge_trace, and zalloc().

Referenced by vxge_probe().

◆ vxge_hw_device_terminate()

void vxge_hw_device_terminate ( struct __vxge_hw_device * hldev)

Definition at line 543 of file vxge_config.c.

544{
545 vxge_trace();
546
548
549 hldev->magic = VXGE_HW_DEVICE_DEAD;
550 free(hldev);
551}
#define assert(condition)
Assert a condition at run-time.
Definition assert.h:50
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55
#define VXGE_HW_DEVICE_DEAD

References assert, free, __vxge_hw_device::magic, VXGE_HW_DEVICE_DEAD, VXGE_HW_DEVICE_MAGIC, and vxge_trace.

Referenced by vxge_hw_device_initialize(), vxge_probe(), and vxge_remove().

◆ vxge_hw_ring_replenish()

enum vxge_hw_status vxge_hw_ring_replenish ( struct __vxge_hw_ring * ring)

Definition at line 558 of file vxge_config.c.

559{
560 struct __vxge_hw_device *hldev;
561 struct vxge_hw_ring_rxd_1 *rxd;
563 u8 offset = 0;
565 u8 i, iob_off;
566
567 vxge_trace();
568
569 hldev = ring->vpathh->hldev;
570 /*
571 * We allocate all the dma buffers first and then share the
572 * these buffers among the all rx descriptors in the block.
573 */
574 for (i = 0; i < ARRAY_SIZE(ring->iobuf); i++) {
575 ring->iobuf[i] = alloc_iob(VXGE_LL_MAX_FRAME_SIZE(hldev->vdev));
576 if (!ring->iobuf[i]) {
577 while (i) {
578 free_iob(ring->iobuf[--i]);
579 ring->iobuf[i] = NULL;
580 }
582 goto iobuf_err;
583 }
584 }
585
587
588 rxd = &ring->rxdl->rxd[offset];
591 else
592 iob_off = offset % ring->buf_per_block;
593
594 rxd->control_0 = rxd->control_1 = 0;
595 vxge_hw_ring_rxd_1b_set(rxd, ring->iobuf[iob_off],
597
599 }
600 /* linking the block to itself as we use only one rx block*/
601 block = ring->rxdl;
602 block->reserved_2_pNext_RxD_block = (unsigned long) block;
603 block->pNext_RxD_Blk_physical = (u64)virt_to_bus(block);
604
605 ring->rxd_offset = 0;
606iobuf_err:
607 return status;
608}
#define rxd
Definition davicom.c:146
#define ARRAY_SIZE(x)
Definition efx_common.h:43
static __always_inline unsigned long virt_to_bus(volatile const void *addr)
Convert virtual address to a bus address.
Definition io.h:184
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
Definition iobuf.c:153
struct io_buffer * alloc_iob(size_t len)
Allocate I/O buffer.
Definition iobuf.c:131
uint8_t block[3][8]
DES-encrypted blocks.
Definition mschapv2.h:1
struct vxgedev * vdev
struct vxge_hw_ring_rxd_1 rxd[VXGE_HW_MAX_RXDS_PER_BLOCK_1]
struct io_buffer * iobuf[VXGE_HW_RING_BUF_PER_BLOCK+1]
struct __vxge_hw_ring_block * rxdl
struct __vxge_hw_virtualpath * vpathh
struct __vxge_hw_device * hldev
struct vxge_hw_ring_rxd_1 - One buffer mode RxD for ring
#define VXGE_HW_RING_BUF_PER_BLOCK
static void vxge_hw_ring_rxd_1b_set(struct vxge_hw_ring_rxd_1 *rxdp, struct io_buffer *iob, u32 size)
vxge_hw_ring_rxd_1b_set - Prepare 1-buffer-mode descriptor.
#define VXGE_HW_MAX_RXDS_PER_BLOCK_1
#define VXGE_LL_MAX_FRAME_SIZE(dev)
Definition vxge_main.h:147
void vxge_hw_ring_rxd_post(struct __vxge_hw_ring *ring __unused, struct vxge_hw_ring_rxd_1 *rxdp)
vxge_hw_ring_rxd_post - Post descriptor on the ring.

References alloc_iob(), ARRAY_SIZE, block, __vxge_hw_ring::buf_per_block, free_iob(), __vxge_hw_virtualpath::hldev, __vxge_hw_ring::iobuf, NULL, offset, __vxge_hw_ring_block::rxd, rxd, __vxge_hw_ring::rxd_offset, __vxge_hw_ring::rxdl, status, u8, __vxge_hw_device::vdev, virt_to_bus(), __vxge_hw_ring::vpathh, VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_MAX_RXDS_PER_BLOCK_1, VXGE_HW_OK, VXGE_HW_RING_BUF_PER_BLOCK, vxge_hw_ring_rxd_1b_set(), vxge_hw_ring_rxd_post(), VXGE_LL_MAX_FRAME_SIZE, and vxge_trace.

Referenced by __vxge_hw_ring_create().

◆ __vxge_hw_ring_create()

enum vxge_hw_status __vxge_hw_ring_create ( struct __vxge_hw_virtualpath * vpath,
struct __vxge_hw_ring * ring )

Definition at line 616 of file vxge_config.c.

618{
620 struct __vxge_hw_device *hldev;
621 u32 vp_id;
622
623 vxge_trace();
624
625 hldev = vpath->hldev;
626 vp_id = vpath->vp_id;
627
628 ring->rxdl = malloc_phys(sizeof(struct __vxge_hw_ring_block),
629 sizeof(struct __vxge_hw_ring_block));
630 if (!ring->rxdl) {
631 vxge_debug(VXGE_ERR, "%s:%d malloc_phys error\n",
632 __func__, __LINE__);
634 goto exit;
635 }
636 ring->rxd_offset = 0;
637 ring->vpathh = vpath;
640 ring->vp_id = vp_id;
641 ring->vp_reg = vpath->vp_reg;
642 ring->common_reg = hldev->common_reg;
643
645
647 if (status != VXGE_HW_OK) {
649 goto exit;
650 }
651exit:
652 return status;
653}
void * malloc_phys(size_t size, size_t phys_align)
Allocate memory with specified physical alignment.
Definition malloc.c:707
struct vxge_hw_vpath_reg * vp_reg
struct vxge_hw_common_reg * common_reg
enum vxge_hw_status __vxge_hw_ring_delete(struct __vxge_hw_ring *ring)
enum vxge_hw_status vxge_hw_ring_replenish(struct __vxge_hw_ring *ring)
#define VXGE_HW_RING_RXD_QWORD_LIMIT
#define VXGE_HW_RING_RX_POLL_WEIGHT

References __vxge_hw_ring_delete(), __vxge_hw_ring::buf_per_block, __vxge_hw_device::common_reg, __vxge_hw_ring::common_reg, __vxge_hw_virtualpath::hldev, malloc_phys(), __vxge_hw_ring::rx_poll_weight, __vxge_hw_ring::rxd_offset, __vxge_hw_ring::rxd_qword_limit, __vxge_hw_ring::rxdl, status, u32, __vxge_hw_ring::vp_id, __vxge_hw_virtualpath::vp_id, __vxge_hw_ring::vp_reg, __vxge_hw_virtualpath::vp_reg, __vxge_hw_ring::vpathh, vxge_debug, VXGE_ERR, VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_OK, VXGE_HW_RING_BUF_PER_BLOCK, vxge_hw_ring_replenish(), VXGE_HW_RING_RX_POLL_WEIGHT, VXGE_HW_RING_RXD_QWORD_LIMIT, and vxge_trace.

Referenced by vxge_hw_vpath_open().

◆ __vxge_hw_ring_delete()

enum vxge_hw_status __vxge_hw_ring_delete ( struct __vxge_hw_ring * ring)

Definition at line 659 of file vxge_config.c.

660{
661 u8 i;
662
663 vxge_trace();
664
665 for (i = 0; (i < ARRAY_SIZE(ring->iobuf)) && ring->iobuf[i]; i++) {
666 free_iob(ring->iobuf[i]);
667 ring->iobuf[i] = NULL;
668 }
669
670 if (ring->rxdl) {
671 free_phys(ring->rxdl, sizeof(struct __vxge_hw_ring_block));
672 ring->rxdl = NULL;
673 }
674 ring->rxd_offset = 0;
675
676 return VXGE_HW_OK;
677}
void free_phys(void *ptr, size_t size)
Free memory allocated with malloc_phys()
Definition malloc.c:723

References ARRAY_SIZE, free_iob(), free_phys(), __vxge_hw_ring::iobuf, NULL, __vxge_hw_ring::rxd_offset, __vxge_hw_ring::rxdl, u8, VXGE_HW_OK, and vxge_trace.

Referenced by __vxge_hw_ring_create(), and vxge_hw_vpath_close().

◆ __vxge_hw_legacy_swapper_set()

enum vxge_hw_status __vxge_hw_legacy_swapper_set ( struct vxge_hw_legacy_reg __iomem * legacy_reg)

Definition at line 684 of file vxge_config.c.

685{
686 u64 val64;
688
689 vxge_trace();
690
691 val64 = readq(&legacy_reg->toc_swapper_fb);
692
693 wmb();
694
695 switch (val64) {
696
698 return status;
699
702 &legacy_reg->pifm_rd_swap_en);
704 &legacy_reg->pifm_rd_flip_en);
706 &legacy_reg->pifm_wr_swap_en);
708 &legacy_reg->pifm_wr_flip_en);
709 break;
710
713 &legacy_reg->pifm_rd_swap_en);
715 &legacy_reg->pifm_wr_swap_en);
716 break;
717
720 &legacy_reg->pifm_rd_flip_en);
722 &legacy_reg->pifm_wr_flip_en);
723 break;
724 }
725
726 wmb();
727
728 val64 = readq(&legacy_reg->toc_swapper_fb);
731
732 return status;
733}
@ VXGE_HW_ERR_SWAPPER_CTRL
Definition vxge_config.h:89
#define VXGE_HW_SWAPPER_WRITE_BYTE_SWAP_ENABLE
Definition vxge_reg.h:633
#define VXGE_HW_SWAPPER_READ_BIT_FLAP_ENABLE
Definition vxge_reg.h:630
#define VXGE_HW_SWAPPER_INITIAL_VALUE
Definition vxge_reg.h:622
#define VXGE_HW_SWAPPER_BIT_FLIPPED
Definition vxge_reg.h:624
#define VXGE_HW_SWAPPER_WRITE_BIT_FLAP_ENABLE
Definition vxge_reg.h:636
#define VXGE_HW_SWAPPER_BYTE_SWAPPED
Definition vxge_reg.h:623
#define VXGE_HW_SWAPPER_READ_BYTE_SWAP_ENABLE
Definition vxge_reg.h:627
#define VXGE_HW_SWAPPER_BYTE_SWAPPED_BIT_FLIPPED
Definition vxge_reg.h:625

References __iomem, __vxge_hw_device::legacy_reg, vxge_hw_legacy_reg::pifm_rd_flip_en, vxge_hw_legacy_reg::pifm_rd_swap_en, vxge_hw_legacy_reg::pifm_wr_flip_en, vxge_hw_legacy_reg::pifm_wr_swap_en, readq, status, vxge_hw_legacy_reg::toc_swapper_fb, VXGE_HW_ERR_SWAPPER_CTRL, VXGE_HW_OK, VXGE_HW_SWAPPER_BIT_FLIPPED, VXGE_HW_SWAPPER_BYTE_SWAPPED, VXGE_HW_SWAPPER_BYTE_SWAPPED_BIT_FLIPPED, VXGE_HW_SWAPPER_INITIAL_VALUE, VXGE_HW_SWAPPER_READ_BIT_FLAP_ENABLE, VXGE_HW_SWAPPER_READ_BYTE_SWAP_ENABLE, VXGE_HW_SWAPPER_WRITE_BIT_FLAP_ENABLE, VXGE_HW_SWAPPER_WRITE_BYTE_SWAP_ENABLE, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_device_get_legacy_reg(), and __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_swapper_set()

enum vxge_hw_status __vxge_hw_vpath_swapper_set ( struct vxge_hw_vpath_reg __iomem * vpath_reg)

Definition at line 740 of file vxge_config.c.

741{
742 vxge_trace();
743
744#if (__BYTE_ORDER != __BIG_ENDIAN)
745 u64 val64;
746
747 val64 = readq(&vpath_reg->vpath_general_cfg1);
748 wmb();
750 writeq(val64, &vpath_reg->vpath_general_cfg1);
751 wmb();
752#endif
753 return VXGE_HW_OK;
754}
#define VXGE_HW_VPATH_GENERAL_CFG1_CTL_BYTE_SWAPEN
Definition vxge_reg.h:4580

References __iomem, readq, vxge_hw_vpath_reg::vpath_general_cfg1, __vxge_hw_device::vpath_reg, VXGE_HW_OK, VXGE_HW_VPATH_GENERAL_CFG1_CTL_BYTE_SWAPEN, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_kdfc_swapper_set()

enum vxge_hw_status __vxge_hw_kdfc_swapper_set ( struct vxge_hw_legacy_reg __iomem * legacy_reg,
struct vxge_hw_vpath_reg __iomem * vpath_reg )

Definition at line 761 of file vxge_config.c.

764{
765 u64 val64;
766
767 vxge_trace();
768
769 val64 = readq(&legacy_reg->pifm_wr_swap_en);
770
772 val64 = readq(&vpath_reg->kdfcctl_cfg0);
773 wmb();
774
778
779 writeq(val64, &vpath_reg->kdfcctl_cfg0);
780 wmb();
781 }
782
783 return VXGE_HW_OK;
784}
#define VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO0
Definition vxge_reg.h:4593
#define VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO1
Definition vxge_reg.h:4594
#define VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO2
Definition vxge_reg.h:4595

References __iomem, vxge_hw_vpath_reg::kdfcctl_cfg0, __vxge_hw_device::legacy_reg, vxge_hw_legacy_reg::pifm_wr_swap_en, readq, __vxge_hw_device::vpath_reg, VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO0, VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO1, VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO2, VXGE_HW_OK, VXGE_HW_SWAPPER_WRITE_BYTE_SWAP_ENABLE, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_vpath_kdfc_configure().

◆ vxge_hw_vpath_strip_fcs_check()

enum vxge_hw_status vxge_hw_vpath_strip_fcs_check ( struct __vxge_hw_device * hldev,
u64 vpath_mask )

Definition at line 790 of file vxge_config.c.

791{
792 struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg;
794 int i = 0, j = 0;
795
796 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
797 if (!((vpath_mask) & vxge_mBIT(i)))
798 continue;
799 vpmgmt_reg = hldev->vpmgmt_reg[i];
800 for (j = 0; j < VXGE_HW_MAC_MAX_MAC_PORT_ID; j++) {
801 if (readq(&vpmgmt_reg->rxmac_cfg0_port_vpmgmt_clone[j])
803 return VXGE_HW_FAIL;
804 }
805 }
806 return status;
807}
u64 rxmac_cfg0_port_vpmgmt_clone[3]
Definition vxge_reg.h:3916
#define VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_STRIP_FCS
Definition vxge_reg.h:3918
#define VXGE_HW_MAC_MAX_MAC_PORT_ID

References __iomem, readq, vxge_hw_vpmgmt_reg::rxmac_cfg0_port_vpmgmt_clone, status, __vxge_hw_device::vpmgmt_reg, VXGE_HW_FAIL, VXGE_HW_MAC_MAX_MAC_PORT_ID, VXGE_HW_MAX_VIRTUAL_PATHS, VXGE_HW_OK, VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_STRIP_FCS, and vxge_mBIT.

Referenced by vxge_probe().

◆ __vxge_hw_fifo_create()

enum vxge_hw_status __vxge_hw_fifo_create ( struct __vxge_hw_virtualpath * vpath,
struct __vxge_hw_fifo * fifo )

Definition at line 814 of file vxge_config.c.

816{
818
819 vxge_trace();
820
821 fifo->vpathh = vpath;
823 fifo->hw_offset = fifo->sw_offset = 0;
824 fifo->nofl_db = vpath->nofl_db;
825 fifo->vp_id = vpath->vp_id;
826 fifo->vp_reg = vpath->vp_reg;
827 fifo->tx_intr_num = (vpath->vp_id * VXGE_HW_MAX_INTR_PER_VP)
829
830 fifo->txdl = malloc_phys(sizeof(struct vxge_hw_fifo_txd)
831 * fifo->depth, fifo->depth);
832 if (!fifo->txdl) {
833 vxge_debug(VXGE_ERR, "%s:%d malloc_phys error\n",
834 __func__, __LINE__);
836 }
837 memset(fifo->txdl, 0, sizeof(struct vxge_hw_fifo_txd) * fifo->depth);
838 return status;
839}
struct vxge_hw_vpath_reg * vp_reg
struct __vxge_hw_non_offload_db_wrapper * nofl_db
struct __vxge_hw_virtualpath * vpathh
struct vxge_hw_fifo_txd * txdl
struct __vxge_hw_non_offload_db_wrapper * nofl_db
struct vxge_hw_fifo_txd - Transmit Descriptor
#define VXGE_HW_FIFO_TXD_DEPTH
#define VXGE_HW_VPATH_INTR_TX
#define VXGE_HW_MAX_INTR_PER_VP

References __vxge_hw_fifo::depth, __vxge_hw_fifo::hw_offset, malloc_phys(), memset(), __vxge_hw_fifo::nofl_db, __vxge_hw_virtualpath::nofl_db, status, __vxge_hw_fifo::sw_offset, __vxge_hw_fifo::tx_intr_num, __vxge_hw_fifo::txdl, __vxge_hw_fifo::vp_id, __vxge_hw_virtualpath::vp_id, __vxge_hw_fifo::vp_reg, __vxge_hw_virtualpath::vp_reg, __vxge_hw_fifo::vpathh, vxge_debug, VXGE_ERR, VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_FIFO_TXD_DEPTH, VXGE_HW_MAX_INTR_PER_VP, VXGE_HW_OK, VXGE_HW_VPATH_INTR_TX, and vxge_trace.

Referenced by vxge_hw_vpath_open().

◆ __vxge_hw_fifo_delete()

enum vxge_hw_status __vxge_hw_fifo_delete ( struct __vxge_hw_fifo * fifo)

Definition at line 845 of file vxge_config.c.

846{
847 vxge_trace();
848
849 if (fifo->txdl)
850 free_phys(fifo->txdl,
851 sizeof(struct vxge_hw_fifo_txd) * fifo->depth);
852
853 fifo->txdl = NULL;
854 fifo->hw_offset = fifo->sw_offset = 0;
855
856 return VXGE_HW_OK;
857}

References __vxge_hw_fifo::depth, free_phys(), __vxge_hw_fifo::hw_offset, NULL, __vxge_hw_fifo::sw_offset, __vxge_hw_fifo::txdl, VXGE_HW_OK, and vxge_trace.

Referenced by vxge_hw_vpath_close(), and vxge_hw_vpath_open().

◆ __vxge_hw_vpath_pci_read()

enum vxge_hw_status __vxge_hw_vpath_pci_read ( struct __vxge_hw_virtualpath * vpath,
u32 phy_func_0,
u32 offset,
u32 * val )

Definition at line 865 of file vxge_config.c.

867{
868 u64 val64;
870 struct vxge_hw_vpath_reg __iomem *vp_reg = vpath->vp_reg;
871
873
874 if (phy_func_0)
876
877 writeq(val64, &vp_reg->pci_config_access_cfg1);
878 wmb();
880 &vp_reg->pci_config_access_cfg2);
881 wmb();
882
884 &vp_reg->pci_config_access_cfg2,
886
887 if (status != VXGE_HW_OK)
888 goto exit;
889
890 val64 = readq(&vp_reg->pci_config_access_status);
891
894 *val = 0;
895 } else
896 *val = (u32)vxge_bVALn(val64, 32, 32);
897exit:
898 return status;
899}
void __asmcall int val
Definition setjmp.h:12
u64 pci_config_access_status
Definition vxge_reg.h:4653
#define VXGE_HW_PCI_CONFIG_ACCESS_CFG1_ADDRESS(val)
Definition vxge_reg.h:4649
#define vxge_bVALn(bits, loc, n)
Definition vxge_reg.h:35
#define VXGE_HW_PCI_CONFIG_ACCESS_STATUS_ACCESS_ERR
Definition vxge_reg.h:4654
#define VXGE_HW_PCI_CONFIG_ACCESS_CFG1_SEL_FUNC0
Definition vxge_reg.h:4650
#define VXGE_HW_PCI_CONFIG_ACCESS_CFG2_REQ
Definition vxge_reg.h:4652
#define VXGE_HW_INTR_MASK_ALL

References __iomem, __vxge_hw_device_register_poll(), offset, vxge_hw_vpath_reg::pci_config_access_cfg1, vxge_hw_vpath_reg::pci_config_access_cfg2, vxge_hw_vpath_reg::pci_config_access_status, readq, status, u32, val, __vxge_hw_virtualpath::vp_reg, vxge_bVALn, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_INTR_MASK_ALL, VXGE_HW_OK, VXGE_HW_PCI_CONFIG_ACCESS_CFG1_ADDRESS, VXGE_HW_PCI_CONFIG_ACCESS_CFG1_SEL_FUNC0, VXGE_HW_PCI_CONFIG_ACCESS_CFG2_REQ, VXGE_HW_PCI_CONFIG_ACCESS_STATUS_ACCESS_ERR, wmb, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_func_id_get()

u32 __vxge_hw_vpath_func_id_get ( struct vxge_hw_vpmgmt_reg __iomem * vpmgmt_reg)

Definition at line 906 of file vxge_config.c.

907{
908 u64 val64;
909
910 val64 = readq(&vpmgmt_reg->vpath_to_func_map_cfg1);
911
912 return
914}
#define VXGE_HW_VPATH_TO_FUNC_MAP_CFG1_GET_VPATH_TO_FUNC_MAP_CFG1(bits)
Definition vxge_reg.h:45

References __iomem, readq, u32, and VXGE_HW_VPATH_TO_FUNC_MAP_CFG1_GET_VPATH_TO_FUNC_MAP_CFG1.

Referenced by __vxge_hw_device_host_info_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_read_rts_ds()

void __vxge_hw_read_rts_ds ( struct vxge_hw_vpath_reg __iomem * vpath_reg,
u64 dta_struct_sel )
inlinestatic

Definition at line 920 of file vxge_config.c.

922{
923 writeq(0, &vpath_reg->rts_access_steer_ctrl);
924 wmb();
925 writeq(dta_struct_sel, &vpath_reg->rts_access_steer_data0);
926 writeq(0, &vpath_reg->rts_access_steer_data1);
927 wmb();
928 return;
929}

References __iomem, wmb, and writeq.

Referenced by __vxge_hw_vpath_card_info_get().

◆ __vxge_hw_vpath_card_info_get()

enum vxge_hw_status __vxge_hw_vpath_card_info_get ( struct vxge_hw_vpath_reg __iomem * vpath_reg,
struct vxge_hw_device_hw_info * hw_info )

Definition at line 936 of file vxge_config.c.

939{
940 u32 i, j;
941 u64 val64;
942 u64 data1 = 0ULL;
943 u64 data2 = 0ULL;
945 u8 *serial_number = hw_info->serial_number;
946 u8 *part_number = hw_info->part_number;
947 u8 *product_desc = hw_info->product_desc;
948
949 __vxge_hw_read_rts_ds(vpath_reg,
951
958
960 &vpath_reg->rts_access_steer_ctrl,
963
964 if (status != VXGE_HW_OK)
965 return status;
966
967 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
968
970 data1 = readq(&vpath_reg->rts_access_steer_data0);
971 ((u64 *)serial_number)[0] = be64_to_cpu(data1);
972
973 data2 = readq(&vpath_reg->rts_access_steer_data1);
974 ((u64 *)serial_number)[1] = be64_to_cpu(data2);
976 } else
977 *serial_number = 0;
978
979 __vxge_hw_read_rts_ds(vpath_reg,
981
988
990 &vpath_reg->rts_access_steer_ctrl,
993
994 if (status != VXGE_HW_OK)
995 return status;
996
997 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
998
1000
1001 data1 = readq(&vpath_reg->rts_access_steer_data0);
1002 ((u64 *)part_number)[0] = be64_to_cpu(data1);
1003
1004 data2 = readq(&vpath_reg->rts_access_steer_data1);
1005 ((u64 *)part_number)[1] = be64_to_cpu(data2);
1006
1008
1009 } else
1010 *part_number = 0;
1011
1012 j = 0;
1013
1016
1017 __vxge_hw_read_rts_ds(vpath_reg, i);
1018
1025
1027 &vpath_reg->rts_access_steer_ctrl,
1030
1031 if (status != VXGE_HW_OK)
1032 return status;
1033
1034 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
1035
1037
1038 data1 = readq(&vpath_reg->rts_access_steer_data0);
1039 ((u64 *)product_desc)[j++] = be64_to_cpu(data1);
1040
1041 data2 = readq(&vpath_reg->rts_access_steer_data1);
1042 ((u64 *)product_desc)[j++] = be64_to_cpu(data2);
1043
1045 } else
1046 *product_desc = 0;
1047 }
1048
1049 return status;
1050}
u32 data2
Definition ar9003_mac.h:6
#define be64_to_cpu(value)
Definition byteswap.h:118
u8 serial_number[VXGE_HW_INFO_LEN]
u8 product_desc[VXGE_HW_INFO_LEN]
u8 part_number[VXGE_HW_INFO_LEN]
static void __vxge_hw_read_rts_ds(struct vxge_hw_vpath_reg __iomem *vpath_reg, u64 dta_struct_sel)
static enum vxge_hw_status __vxge_hw_pio_mem_write64(u64 val64, void __iomem *addr, u64 mask, u32 max_millis)
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_3
Definition vxge_reg.h:424
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_0
Definition vxge_reg.h:421
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_SERIAL_NUMBER
Definition vxge_reg.h:418
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_PART_NUMBER
Definition vxge_reg.h:417
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_MEMO_ENTRY
Definition vxge_reg.h:188

References __iomem, __vxge_hw_pio_mem_write64(), __vxge_hw_read_rts_ds(), be64_to_cpu, data1, data2, vxge_hw_device_hw_info::part_number, vxge_hw_device_hw_info::product_desc, readq, vxge_hw_device_hw_info::serial_number, status, u32, u8, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_MEMO_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_0, VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_3, VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_PART_NUMBER, and VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_SERIAL_NUMBER.

Referenced by vxge_hw_device_hw_info_get().

◆ __vxge_hw_vpath_fw_ver_get()

enum vxge_hw_status __vxge_hw_vpath_fw_ver_get ( struct vxge_hw_vpath_reg __iomem * vpath_reg,
struct vxge_hw_device_hw_info * hw_info )

Definition at line 1057 of file vxge_config.c.

1060{
1061 u64 val64;
1062 u64 data1 = 0ULL;
1063 u64 data2 = 0ULL;
1064 struct vxge_hw_device_version *fw_version = &hw_info->fw_version;
1065 struct vxge_hw_device_date *fw_date = &hw_info->fw_date;
1066 struct vxge_hw_device_version *flash_version = &hw_info->flash_version;
1067 struct vxge_hw_device_date *flash_date = &hw_info->flash_date;
1069
1076
1078 &vpath_reg->rts_access_steer_ctrl,
1081
1082 if (status != VXGE_HW_OK)
1083 goto exit;
1084
1085 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
1086
1088
1089 data1 = readq(&vpath_reg->rts_access_steer_data0);
1090 data2 = readq(&vpath_reg->rts_access_steer_data1);
1091
1092 fw_date->day =
1094 data1);
1095 fw_date->month =
1097 data1);
1098 fw_date->year =
1100 data1);
1101
1102 snprintf(fw_date->date, VXGE_HW_FW_STRLEN, "%d/%d/%d",
1103 fw_date->month, fw_date->day, fw_date->year);
1104
1105 fw_version->major =
1107 fw_version->minor =
1109 fw_version->build =
1111
1112 snprintf(fw_version->version, VXGE_HW_FW_STRLEN, "%d.%d.%d",
1113 fw_version->major, fw_version->minor, fw_version->build);
1114
1115 flash_date->day =
1117 flash_date->month =
1119 flash_date->year =
1121
1122 snprintf(flash_date->date, VXGE_HW_FW_STRLEN, "%d/%d/%d",
1123 flash_date->month, flash_date->day, flash_date->year);
1124
1125 flash_version->major =
1127 flash_version->minor =
1129 flash_version->build =
1131
1132 snprintf(flash_version->version, VXGE_HW_FW_STRLEN, "%d.%d.%d",
1133 flash_version->major, flash_version->minor,
1134 flash_version->build);
1135
1137
1138 } else
1140exit:
1141 return status;
1142}
char date[VXGE_HW_FW_STRLEN]
struct vxge_hw_device_version flash_version
struct vxge_hw_device_date flash_date
struct vxge_hw_device_version fw_version
struct vxge_hw_device_date fw_date
char version[VXGE_HW_FW_STRLEN]
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition vsprintf.c:383
#define VXGE_HW_FW_STRLEN
struct vxge_hw_device_date - Date Format @day: Day @month: Month @year: Year
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_DAY(bits)
Definition vxge_reg.h:440
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_BUILD(bits)
Definition vxge_reg.h:479
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_DAY(bits)
Definition vxge_reg.h:462
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MINOR(bits)
Definition vxge_reg.h:476
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_YEAR(bits)
Definition vxge_reg.h:468
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_ENTRY
Definition vxge_reg.h:186
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MAJOR(bits)
Definition vxge_reg.h:451
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MONTH(bits)
Definition vxge_reg.h:465
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MINOR(bits)
Definition vxge_reg.h:454
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MAJOR(bits)
Definition vxge_reg.h:473
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_BUILD(bits)
Definition vxge_reg.h:457
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MONTH(bits)
Definition vxge_reg.h:443
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_YEAR(bits)
Definition vxge_reg.h:446

References __iomem, __vxge_hw_pio_mem_write64(), vxge_hw_device_version::build, data1, data2, vxge_hw_device_date::date, vxge_hw_device_date::day, vxge_hw_device_hw_info::flash_date, vxge_hw_device_hw_info::flash_version, vxge_hw_device_hw_info::fw_date, vxge_hw_device_hw_info::fw_version, vxge_hw_device_version::major, vxge_hw_device_version::minor, vxge_hw_device_date::month, readq, snprintf(), status, u32, vxge_hw_device_version::version, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_FW_STRLEN, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_BUILD, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_DAY, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MAJOR, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MINOR, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MONTH, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_YEAR, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_BUILD, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_DAY, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MAJOR, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MINOR, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MONTH, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_YEAR, and vxge_hw_device_date::year.

Referenced by vxge_hw_device_hw_info_get().

◆ __vxge_hw_vpath_addr_get()

enum vxge_hw_status __vxge_hw_vpath_addr_get ( struct vxge_hw_vpath_reg * vpath_reg,
u8(macaddr) [ETH_ALEN],
u8(macaddr_mask) [ETH_ALEN] )

Definition at line 1149 of file vxge_config.c.

1152{
1153 u32 i;
1154 u64 val64;
1155 u64 data1 = 0ULL;
1156 u64 data2 = 0ULL;
1159
1160 while (1) {
1161 val64 = VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION(action) |
1166
1168 &vpath_reg->rts_access_steer_ctrl,
1171
1172 if (status != VXGE_HW_OK)
1173 break;
1174
1175 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
1176
1178
1179 data1 = readq(&vpath_reg->rts_access_steer_data0);
1180 data2 = readq(&vpath_reg->rts_access_steer_data1);
1181
1182 data1 =
1184 data2 =
1186 data2);
1187
1188 for (i = ETH_ALEN; i > 0; i--) {
1189 macaddr[i-1] = (u8)(data1 & 0xFF);
1190 data1 >>= 8;
1191
1192 macaddr_mask[i-1] = (u8)(data2 & 0xFF);
1193 data2 >>= 8;
1194 }
1195 if (is_valid_ether_addr(macaddr)) {
1197 break;
1198 }
1199 action =
1201 } else
1203 }
1204
1205 return status;
1206}
static int is_valid_ether_addr(const void *addr)
Check if Ethernet address is valid.
Definition ethernet.h:78
#define ETH_ALEN
Definition if_ether.h:9
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_NEXT_ENTRY
Definition vxge_reg.h:185
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_DA_MAC_ADDR_MASK(bits)
Definition vxge_reg.h:365
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_FIRST_ENTRY
Definition vxge_reg.h:184
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_DA_MAC_ADDR(bits)
Definition vxge_reg.h:206
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_DA
Definition vxge_reg.h:192

References __vxge_hw_pio_mem_write64(), data1, data2, ETH_ALEN, is_valid_ether_addr(), readq, vxge_hw_vpath_reg::rts_access_steer_ctrl, vxge_hw_vpath_reg::rts_access_steer_data0, vxge_hw_vpath_reg::rts_access_steer_data1, status, u32, u8, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_FIRST_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_NEXT_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_DA, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_DA_MAC_ADDR, and VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_DA_MAC_ADDR_MASK.

Referenced by vxge_hw_device_hw_info_get().

◆ __vxge_hw_vpath_mgmt_read()

enum vxge_hw_status __vxge_hw_vpath_mgmt_read ( struct __vxge_hw_virtualpath * vpath)
static

Definition at line 1213 of file vxge_config.c.

1215{
1216 u32 i, mtu = 0, max_pyld = 0;
1217 u64 val64;
1219
1220 for (i = 0; i < VXGE_HW_MAC_MAX_MAC_PORT_ID; i++) {
1221
1222 val64 = readq(&vpath->vpmgmt_reg->
1224 max_pyld =
1225 (u32)
1227 (val64);
1228 if (mtu < max_pyld)
1229 mtu = max_pyld;
1230 }
1231
1233
1235
1238 else
1240
1241 return status;
1242}
uint32_t mtu
Maximum MTU.
Definition ena.h:17
struct vxge_hw_vpmgmt_reg * vpmgmt_reg
u64 xgmac_gen_status_vpmgmt_clone
Definition vxge_reg.h:3950
@ VXGE_HW_LINK_UP
@ VXGE_HW_LINK_DOWN
#define VXGE_HW_DEVICE_LINK_STATE_SET(hldev, ls)
#define VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_GET_MAX_PYLD_LEN(bits)
Definition vxge_reg.h:96
#define VXGE_HW_XGMAC_GEN_STATUS_VPMGMT_CLONE_XMACJ_NTWK_OK
Definition vxge_reg.h:3951
u64 rxmac_cfg0_port_vpmgmt_clone[3]
Definition vxge_reg.h:78
#define VXGE_HW_MAC_HEADER_MAX_SIZE

References __vxge_hw_virtualpath::hldev, __vxge_hw_virtualpath::max_mtu, mtu, readq, rxmac_cfg0_port_vpmgmt_clone, status, u32, __vxge_hw_virtualpath::vpmgmt_reg, VXGE_HW_DEVICE_LINK_STATE_SET, VXGE_HW_LINK_DOWN, VXGE_HW_LINK_UP, VXGE_HW_MAC_HEADER_MAX_SIZE, VXGE_HW_MAC_MAX_MAC_PORT_ID, VXGE_HW_OK, VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_GET_MAX_PYLD_LEN, VXGE_HW_XGMAC_GEN_STATUS_VPMGMT_CLONE_XMACJ_NTWK_OK, and vxge_hw_vpmgmt_reg::xgmac_gen_status_vpmgmt_clone.

Referenced by __vxge_hw_vp_initialize().

◆ __vxge_hw_vpath_reset_check()

◆ __vxge_hw_vpath_reset()

enum vxge_hw_status __vxge_hw_vpath_reset ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1270 of file vxge_config.c.

1271{
1272 u64 val64;
1274
1275 vxge_trace();
1276
1277 val64 = VXGE_HW_CMN_RSTHDLR_CFG0_SW_RESET_VPATH(1 << (16 - vp_id));
1278
1280 &hldev->common_reg->cmn_rsthdlr_cfg0);
1281
1282 return status;
1283}
static void __vxge_hw_pio_mem_write32_upper(u32 val, void __iomem *addr)
#define VXGE_HW_CMN_RSTHDLR_CFG0_SW_RESET_VPATH(val)
Definition vxge_reg.h:763

References __vxge_hw_pio_mem_write32_upper(), vxge_hw_common_reg::cmn_rsthdlr_cfg0, __vxge_hw_device::common_reg, status, u32, vxge_bVALn, VXGE_HW_CMN_RSTHDLR_CFG0_SW_RESET_VPATH, VXGE_HW_OK, and vxge_trace.

Referenced by __vxge_hw_vp_initialize(), and vxge_hw_vpath_reset().

◆ __vxge_hw_vpath_prc_configure()

void __vxge_hw_vpath_prc_configure ( struct __vxge_hw_device * hldev)

Definition at line 1291 of file vxge_config.c.

1292{
1293 u64 val64;
1294 struct __vxge_hw_virtualpath *vpath;
1295 struct vxge_hw_vpath_reg __iomem *vp_reg;
1296
1297 vxge_trace();
1298
1299 vpath = &hldev->virtual_path;
1300 vp_reg = vpath->vp_reg;
1301
1302 val64 = readq(&vp_reg->prc_cfg1);
1304 writeq(val64, &vp_reg->prc_cfg1);
1305
1306 val64 = readq(&vpath->vp_reg->prc_cfg6);
1307 val64 &= ~VXGE_HW_PRC_CFG6_RXD_CRXDT(0x1ff);
1308 val64 &= ~VXGE_HW_PRC_CFG6_RXD_SPAT(0x1ff);
1310 val64 |= VXGE_HW_PRC_CFG6_RXD_CRXDT(0x3);
1311 val64 |= VXGE_HW_PRC_CFG6_RXD_SPAT(0xf);
1312 writeq(val64, &vpath->vp_reg->prc_cfg6);
1313
1315 (u64)virt_to_bus(vpath->ringh.rxdl) >> 3),
1316 &vp_reg->prc_cfg5);
1317
1318 val64 = readq(&vp_reg->prc_cfg4);
1319 val64 |= VXGE_HW_PRC_CFG4_IN_SVC;
1320 val64 &= ~VXGE_HW_PRC_CFG4_RING_MODE(0x3);
1324
1325 writeq(val64, &vp_reg->prc_cfg4);
1326 return;
1327}
struct __vxge_hw_ring ringh
#define VXGE_HW_PRC_CFG6_DOORBELL_MODE_EN
Definition vxge_reg.h:4082
#define VXGE_HW_PRC_CFG4_RING_MODE_ONE_BUFFER
Definition vxge_reg.h:139
#define VXGE_HW_PRC_CFG4_RING_MODE(val)
Definition vxge_reg.h:4069
#define VXGE_HW_PRC_CFG4_RTH_DISABLE
Definition vxge_reg.h:4072
#define VXGE_HW_PRC_CFG1_RTI_TINT_DISABLE
Definition vxge_reg.h:4060
#define VXGE_HW_PRC_CFG4_IN_SVC
Definition vxge_reg.h:4068
#define VXGE_HW_PRC_CFG6_RXD_CRXDT(val)
Definition vxge_reg.h:4085
#define VXGE_HW_PRC_CFG5_RXD0_ADD(val)
Definition vxge_reg.h:4078
#define VXGE_HW_PRC_CFG6_RXD_SPAT(val)
Definition vxge_reg.h:4087

References __iomem, vxge_hw_vpath_reg::prc_cfg1, vxge_hw_vpath_reg::prc_cfg4, vxge_hw_vpath_reg::prc_cfg5, vxge_hw_vpath_reg::prc_cfg6, readq, __vxge_hw_virtualpath::ringh, __vxge_hw_ring::rxdl, virt_to_bus(), __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_PRC_CFG1_RTI_TINT_DISABLE, VXGE_HW_PRC_CFG4_IN_SVC, VXGE_HW_PRC_CFG4_RING_MODE, VXGE_HW_PRC_CFG4_RING_MODE_ONE_BUFFER, VXGE_HW_PRC_CFG4_RTH_DISABLE, VXGE_HW_PRC_CFG5_RXD0_ADD, VXGE_HW_PRC_CFG6_DOORBELL_MODE_EN, VXGE_HW_PRC_CFG6_RXD_CRXDT, VXGE_HW_PRC_CFG6_RXD_SPAT, vxge_trace, and writeq.

Referenced by vxge_hw_vpath_open(), and vxge_hw_vpath_recover_from_reset().

◆ __vxge_hw_vpath_kdfc_configure()

enum vxge_hw_status __vxge_hw_vpath_kdfc_configure ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1335 of file vxge_config.c.

1336{
1337 u64 val64;
1338 u64 vpath_stride;
1340 struct __vxge_hw_virtualpath *vpath;
1341 struct vxge_hw_vpath_reg __iomem *vp_reg;
1342
1343 vxge_trace();
1344
1345 vpath = &hldev->virtual_path;
1346 vp_reg = vpath->vp_reg;
1348
1349 if (status != VXGE_HW_OK)
1350 goto exit;
1351
1352 val64 = readq(&vp_reg->kdfc_drbl_triplet_total);
1353
1354 vpath->max_kdfc_db =
1356 val64+1)/2;
1357
1358 vpath->max_nofl_db = vpath->max_kdfc_db;
1359
1361 (vpath->max_nofl_db*2)-1);
1362
1363 writeq(val64, &vp_reg->kdfc_fifo_trpl_partition);
1364
1366 &vp_reg->kdfc_fifo_trpl_ctrl);
1367
1368 val64 = readq(&vp_reg->kdfc_trpl_fifo_0_ctrl);
1369
1370 val64 &= ~(VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE(0x3) |
1372
1375#if (__BYTE_ORDER != __BIG_ENDIAN)
1377#endif
1379
1380 writeq(val64, &vp_reg->kdfc_trpl_fifo_0_ctrl);
1382 wmb();
1383 vpath_stride = readq(&hldev->toc_reg->toc_kdfc_vpath_stride);
1384
1385 vpath->nofl_db =
1387 (hldev->kdfc + (vp_id *
1389 vpath_stride)));
1390exit:
1391 return status;
1392}
u64 toc_kdfc_vpath_stride
Definition vxge_reg.h:697
u64 kdfc_drbl_triplet_total
Definition vxge_reg.h:4167
u64 kdfc_trpl_fifo_0_wb_address
Definition vxge_reg.h:4157
u64 kdfc_fifo_trpl_partition
Definition vxge_reg.h:4116
enum vxge_hw_status __vxge_hw_kdfc_swapper_set(struct vxge_hw_legacy_reg __iomem *legacy_reg, struct vxge_hw_vpath_reg __iomem *vpath_reg)
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE(val)
Definition vxge_reg.h:4123
#define VXGE_HW_KDFC_DRBL_TRIPLET_TOTAL_GET_KDFC_MAX_SIZE(bits)
Definition vxge_reg.h:105
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE_NON_OFFLOAD_ONLY
Definition vxge_reg.h:109
#define VXGE_HW_TOC_KDFC_VPATH_STRIDE_GET_TOC_KDFC_VPATH_STRIDE(bits)
Definition vxge_reg.h:124
#define VXGE_HW_KDFC_FIFO_TRPL_CTRL_TRIPLET_ENABLE
Definition vxge_reg.h:4121
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SWAP_EN
Definition vxge_reg.h:4125
#define VXGE_HW_KDFC_FIFO_TRPL_PARTITION_LENGTH_0(val)
Definition vxge_reg.h:4117
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SELECT(val)
Definition vxge_reg.h:4131

References __iomem, __vxge_hw_kdfc_swapper_set(), __vxge_hw_device::kdfc, vxge_hw_vpath_reg::kdfc_drbl_triplet_total, vxge_hw_vpath_reg::kdfc_fifo_trpl_ctrl, vxge_hw_vpath_reg::kdfc_fifo_trpl_partition, vxge_hw_vpath_reg::kdfc_trpl_fifo_0_ctrl, vxge_hw_vpath_reg::kdfc_trpl_fifo_0_wb_address, __vxge_hw_device::legacy_reg, __vxge_hw_virtualpath::max_kdfc_db, __vxge_hw_virtualpath::max_nofl_db, __vxge_hw_virtualpath::nofl_db, readq, status, vxge_hw_toc_reg::toc_kdfc_vpath_stride, __vxge_hw_device::toc_reg, u32, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_KDFC_DRBL_TRIPLET_TOTAL_GET_KDFC_MAX_SIZE, VXGE_HW_KDFC_FIFO_TRPL_CTRL_TRIPLET_ENABLE, VXGE_HW_KDFC_FIFO_TRPL_PARTITION_LENGTH_0, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE_NON_OFFLOAD_ONLY, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SELECT, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SWAP_EN, VXGE_HW_OK, VXGE_HW_TOC_KDFC_VPATH_STRIDE_GET_TOC_KDFC_VPATH_STRIDE, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_mac_configure()

enum vxge_hw_status __vxge_hw_vpath_mac_configure ( struct __vxge_hw_device * hldev)

Definition at line 1399 of file vxge_config.c.

1400{
1401 u64 val64;
1403 struct __vxge_hw_virtualpath *vpath;
1404 struct vxge_hw_vpath_reg __iomem *vp_reg;
1405
1406 vxge_trace();
1407
1408 vpath = &hldev->virtual_path;
1409 vp_reg = vpath->vp_reg;
1410
1412 vpath->vsport_number), &vp_reg->xmac_vsport_choice);
1413
1414 val64 = readq(&vp_reg->rxmac_vcfg1);
1415
1418
1419 writeq(val64, &vp_reg->rxmac_vcfg1);
1420 return status;
1421}
#define VXGE_HW_XMAC_VSPORT_CHOICE_VSPORT_NUMBER(val)
Definition vxge_reg.h:4224
#define VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_EN_MODE
Definition vxge_reg.h:4202
#define VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_BD_MODE(val)
Definition vxge_reg.h:4201

References __iomem, readq, vxge_hw_vpath_reg::rxmac_vcfg1, status, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, __vxge_hw_virtualpath::vsport_number, VXGE_HW_OK, VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_BD_MODE, VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_EN_MODE, VXGE_HW_XMAC_VSPORT_CHOICE_VSPORT_NUMBER, vxge_trace, writeq, and vxge_hw_vpath_reg::xmac_vsport_choice.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_tim_configure()

enum vxge_hw_status __vxge_hw_vpath_tim_configure ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1429 of file vxge_config.c.

1430{
1431 u64 val64;
1433 struct __vxge_hw_virtualpath *vpath;
1434 struct vxge_hw_vpath_reg __iomem *vp_reg;
1435
1436 vxge_trace();
1437
1438 vpath = &hldev->virtual_path;
1439 vp_reg = vpath->vp_reg;
1440
1441 writeq((u64)0, &vp_reg->tim_dest_addr);
1442 writeq((u64)0, &vp_reg->tim_vpath_map);
1443 writeq((u64)0, &vp_reg->tim_bitmap);
1444 writeq((u64)0, &vp_reg->tim_remap);
1445
1447 (vp_id * VXGE_HW_MAX_INTR_PER_VP) +
1449
1450 val64 = readq(&vp_reg->tim_pci_cfg);
1452 writeq(val64, &vp_reg->tim_pci_cfg);
1453
1454 /* TX configuration */
1456 (VXGE_TTI_BTIMER_VAL * 1000) / 272);
1464
1470
1474 (VXGE_TTI_LTIMER_VAL * 1000) / 272);
1476
1477 /* RX configuration */
1479 (VXGE_RTI_BTIMER_VAL * 1000) / 272);
1485
1491
1495 (VXGE_RTI_LTIMER_VAL * 1000) / 272);
1497
1498 val64 = 0;
1505
1506 return status;
1507}
u64 tim_cfg3_int_num[4]
Definition vxge_reg.h:4301
u64 tim_cfg1_int_num[4]
Definition vxge_reg.h:4286
u64 tim_cfg2_int_num[4]
Definition vxge_reg.h:4296
#define RTI_RX_UFC_C
Definition vxge_main.h:120
#define VXGE_TTI_LTIMER_VAL
Definition vxge_main.h:77
#define TTI_TX_URANGE_B
Definition vxge_main.h:94
#define TTI_TX_URANGE_C
Definition vxge_main.h:95
#define TTI_TX_UFC_A
Definition vxge_main.h:96
#define RTI_RX_UFC_B
Definition vxge_main.h:119
#define TTI_TX_URANGE_A
Definition vxge_main.h:93
#define TTI_TX_UFC_C
Definition vxge_main.h:98
#define VXGE_RTI_BTIMER_VAL
Definition vxge_main.h:79
#define VXGE_RTI_LTIMER_VAL
Definition vxge_main.h:80
#define RTI_RX_UFC_A
Definition vxge_main.h:118
#define RTI_RX_URANGE_C
Definition vxge_main.h:114
#define RTI_RX_UFC_D
Definition vxge_main.h:121
#define TTI_TX_UFC_D
Definition vxge_main.h:99
#define TTI_TX_UFC_B
Definition vxge_main.h:97
#define RTI_RX_URANGE_A
Definition vxge_main.h:112
#define RTI_RX_URANGE_B
Definition vxge_main.h:113
#define VXGE_TTI_BTIMER_VAL
Definition vxge_main.h:73
#define VXGE_HW_TIM_CFG3_INT_NUM_UTIL_SEL(val)
Definition vxge_reg.h:4305
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_A(val)
Definition vxge_reg.h:4297
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_C(val)
Definition vxge_reg.h:4299
#define VXGE_HW_TIM_CFG1_INT_NUM_URNG_A(val)
Definition vxge_reg.h:4293
#define VXGE_HW_TIM_CFG1_INT_NUM_TIMER_AC
Definition vxge_reg.h:4291
#define VXGE_HW_TIM_CFG1_INT_NUM_TXFRM_CNT_EN
Definition vxge_reg.h:4289
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_B(val)
Definition vxge_reg.h:4298
#define VXGE_HW_TIM_CFG1_INT_NUM_TIMER_CI
Definition vxge_reg.h:4292
#define VXGE_HW_TIM_RING_ASSN_INT_NUM(val)
Definition vxge_reg.h:4319
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_D(val)
Definition vxge_reg.h:4300
#define VXGE_HW_TIM_CFG3_INT_NUM_LTIMER_VAL(val)
Definition vxge_reg.h:4306
#define VXGE_HW_TIM_CFG1_INT_NUM_URNG_B(val)
Definition vxge_reg.h:4294
#define VXGE_HW_TIM_CFG1_INT_NUM_URNG_C(val)
Definition vxge_reg.h:4295
#define VXGE_HW_TIM_PCI_CFG_ADD_PAD
Definition vxge_reg.h:4328
#define VXGE_HW_TIM_CFG1_INT_NUM_BTIMER_VAL(val)
Definition vxge_reg.h:4287
#define VXGE_HW_VPATH_INTR_BMAP
#define VXGE_HW_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL
#define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL
#define VXGE_HW_VPATH_INTR_EINTA
#define VXGE_HW_VPATH_INTR_RX

References __iomem, readq, RTI_RX_UFC_A, RTI_RX_UFC_B, RTI_RX_UFC_C, RTI_RX_UFC_D, RTI_RX_URANGE_A, RTI_RX_URANGE_B, RTI_RX_URANGE_C, status, vxge_hw_vpath_reg::tim_bitmap, vxge_hw_vpath_reg::tim_cfg1_int_num, vxge_hw_vpath_reg::tim_cfg2_int_num, vxge_hw_vpath_reg::tim_cfg3_int_num, vxge_hw_vpath_reg::tim_dest_addr, vxge_hw_vpath_reg::tim_pci_cfg, vxge_hw_vpath_reg::tim_remap, vxge_hw_vpath_reg::tim_ring_assn, vxge_hw_vpath_reg::tim_vpath_map, TTI_TX_UFC_A, TTI_TX_UFC_B, TTI_TX_UFC_C, TTI_TX_UFC_D, TTI_TX_URANGE_A, TTI_TX_URANGE_B, TTI_TX_URANGE_C, u32, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_MAX_INTR_PER_VP, VXGE_HW_OK, VXGE_HW_TIM_CFG1_INT_NUM_BTIMER_VAL, VXGE_HW_TIM_CFG1_INT_NUM_TIMER_AC, VXGE_HW_TIM_CFG1_INT_NUM_TIMER_CI, VXGE_HW_TIM_CFG1_INT_NUM_TXFRM_CNT_EN, VXGE_HW_TIM_CFG1_INT_NUM_URNG_A, VXGE_HW_TIM_CFG1_INT_NUM_URNG_B, VXGE_HW_TIM_CFG1_INT_NUM_URNG_C, VXGE_HW_TIM_CFG2_INT_NUM_UEC_A, VXGE_HW_TIM_CFG2_INT_NUM_UEC_B, VXGE_HW_TIM_CFG2_INT_NUM_UEC_C, VXGE_HW_TIM_CFG2_INT_NUM_UEC_D, VXGE_HW_TIM_CFG3_INT_NUM_LTIMER_VAL, VXGE_HW_TIM_CFG3_INT_NUM_UTIL_SEL, VXGE_HW_TIM_PCI_CFG_ADD_PAD, VXGE_HW_TIM_RING_ASSN_INT_NUM, VXGE_HW_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL, VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL, VXGE_HW_VPATH_INTR_BMAP, VXGE_HW_VPATH_INTR_EINTA, VXGE_HW_VPATH_INTR_RX, VXGE_HW_VPATH_INTR_TX, VXGE_RTI_BTIMER_VAL, VXGE_RTI_LTIMER_VAL, vxge_trace, VXGE_TTI_BTIMER_VAL, VXGE_TTI_LTIMER_VAL, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_initialize()

enum vxge_hw_status __vxge_hw_vpath_initialize ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1515 of file vxge_config.c.

1516{
1517 u64 val64;
1518 u32 val32;
1519 int i;
1521 struct __vxge_hw_virtualpath *vpath;
1522 struct vxge_hw_vpath_reg *vp_reg;
1523
1524 vxge_trace();
1525
1526 vpath = &hldev->virtual_path;
1527
1528 if (!(hldev->vpath_assignments & vxge_mBIT(vp_id))) {
1530 goto exit;
1531 }
1532 vp_reg = vpath->vp_reg;
1534 if (status != VXGE_HW_OK)
1535 goto exit;
1536
1538
1539 if (status != VXGE_HW_OK)
1540 goto exit;
1541 val64 = readq(&vpath->vpmgmt_reg->xmac_vsport_choices_vp);
1542
1543 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
1544 if (val64 & vxge_mBIT(i))
1545 vpath->vsport_number = i;
1546 }
1547
1549
1550 if (status != VXGE_HW_OK)
1551 goto exit;
1552
1553 status = __vxge_hw_vpath_kdfc_configure(hldev, vp_id);
1554
1555 if (status != VXGE_HW_OK)
1556 goto exit;
1557
1558 status = __vxge_hw_vpath_tim_configure(hldev, vp_id);
1559
1560 if (status != VXGE_HW_OK)
1561 goto exit;
1562
1563 val64 = readq(&vp_reg->rtdma_rd_optimization_ctrl);
1564
1565 /* Get MRRS value from device control */
1566 status = __vxge_hw_vpath_pci_read(vpath, 1, 0x78, &val32);
1567
1568 if (status == VXGE_HW_OK) {
1569 val32 = (val32 & VXGE_HW_PCI_EXP_DEVCTL_READRQ) >> 12;
1570 val64 &=
1572 val64 |=
1574
1576 }
1577
1579 val64 |=
1582
1584 writeq(val64, &vp_reg->rtdma_rd_optimization_ctrl);
1585
1586exit:
1587 return status;
1588}
u64 rtdma_rd_optimization_ctrl
Definition vxge_reg.h:4259
enum vxge_hw_status __vxge_hw_vpath_mac_configure(struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_vpath_pci_read(struct __vxge_hw_virtualpath *vpath, u32 phy_func_0, u32 offset, u32 *val)
enum vxge_hw_status __vxge_hw_vpath_tim_configure(struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_kdfc_configure(struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_swapper_set(struct vxge_hw_vpath_reg __iomem *vpath_reg)
#define VXGE_HW_MAX_PAYLOAD_SIZE_512
Definition vxge_config.h:68
@ VXGE_HW_ERR_VPATH_NOT_AVAILABLE
Definition vxge_config.h:86
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY_EN
Definition vxge_reg.h:4270
#define VXGE_HW_PCI_EXP_DEVCTL_READRQ
Definition vxge_reg.h:4264
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY(val)
Definition vxge_reg.h:4271
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_FILL_THRESH(val)
Definition vxge_reg.h:4265
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_WAIT_FOR_SPACE
Definition vxge_reg.h:4263

References __vxge_hw_legacy_swapper_set(), __vxge_hw_vpath_kdfc_configure(), __vxge_hw_vpath_mac_configure(), __vxge_hw_vpath_pci_read(), __vxge_hw_vpath_swapper_set(), __vxge_hw_vpath_tim_configure(), __vxge_hw_device::legacy_reg, readq, vxge_hw_vpath_reg::rtdma_rd_optimization_ctrl, status, u32, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, __vxge_hw_device::vpath_assignments, __vxge_hw_virtualpath::vpmgmt_reg, __vxge_hw_virtualpath::vsport_number, VXGE_HW_ERR_VPATH_NOT_AVAILABLE, VXGE_HW_MAX_PAYLOAD_SIZE_512, VXGE_HW_MAX_VIRTUAL_PATHS, VXGE_HW_OK, VXGE_HW_PCI_EXP_DEVCTL_READRQ, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY_EN, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_FILL_THRESH, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_WAIT_FOR_SPACE, vxge_mBIT, vxge_trace, writeq, and vxge_hw_vpmgmt_reg::xmac_vsport_choices_vp.

Referenced by __vxge_hw_vp_initialize(), and vxge_hw_vpath_recover_from_reset().

◆ __vxge_hw_vp_initialize()

enum vxge_hw_status __vxge_hw_vp_initialize ( struct __vxge_hw_device * hldev,
u32 vp_id,
struct __vxge_hw_virtualpath * vpath )

Definition at line 1596 of file vxge_config.c.

1598{
1600
1601 vxge_trace();
1602
1603 if (!(hldev->vpath_assignments & vxge_mBIT(vp_id))) {
1605 goto exit;
1606 }
1607
1608 vpath->vp_id = vp_id;
1609 vpath->vp_open = VXGE_HW_VP_OPEN;
1610 vpath->hldev = hldev;
1611 vpath->vp_reg = hldev->vpath_reg[vp_id];
1612 vpath->vpmgmt_reg = hldev->vpmgmt_reg[vp_id];
1613
1614 __vxge_hw_vpath_reset(hldev, vp_id);
1615
1617 if (status != VXGE_HW_OK) {
1618 memset(vpath, 0, sizeof(struct __vxge_hw_virtualpath));
1619 goto exit;
1620 }
1621
1623 hldev->tim_int_mask1, vp_id);
1624
1625 status = __vxge_hw_vpath_initialize(hldev, vp_id);
1626
1627 if (status != VXGE_HW_OK) {
1628 __vxge_hw_vp_terminate(hldev, vpath);
1629 goto exit;
1630 }
1631
1633exit:
1634 return status;
1635}
enum vxge_hw_status __vxge_hw_vpath_reset(struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_reset_check(struct __vxge_hw_virtualpath *vpath)
void __vxge_hw_vp_terminate(struct __vxge_hw_device *hldev, struct __vxge_hw_virtualpath *vpath)
static enum vxge_hw_status __vxge_hw_vpath_mgmt_read(struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_vpath_initialize(struct __vxge_hw_device *hldev, u32 vp_id)
#define VXGE_HW_DEVICE_TIM_INT_MASK_SET(m0, m1, i)
#define VXGE_HW_VP_OPEN

References __vxge_hw_vp_terminate(), __vxge_hw_vpath_initialize(), __vxge_hw_vpath_mgmt_read(), __vxge_hw_vpath_reset(), __vxge_hw_vpath_reset_check(), __vxge_hw_virtualpath::hldev, memset(), status, __vxge_hw_device::tim_int_mask0, __vxge_hw_device::tim_int_mask1, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, __vxge_hw_virtualpath::vp_reg, __vxge_hw_device::vpath_assignments, __vxge_hw_device::vpath_reg, __vxge_hw_device::vpmgmt_reg, __vxge_hw_virtualpath::vpmgmt_reg, VXGE_HW_DEVICE_TIM_INT_MASK_SET, VXGE_HW_ERR_VPATH_NOT_AVAILABLE, VXGE_HW_OK, VXGE_HW_VP_OPEN, vxge_mBIT, and vxge_trace.

Referenced by vxge_hw_vpath_open().

◆ __vxge_hw_vp_terminate()

void __vxge_hw_vp_terminate ( struct __vxge_hw_device * hldev,
struct __vxge_hw_virtualpath * vpath )

Definition at line 1642 of file vxge_config.c.

1644{
1645 vxge_trace();
1646
1647 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN)
1648 return;
1649
1651 hldev->tim_int_mask1, vpath->vp_id);
1652
1653 memset(vpath, 0, sizeof(struct __vxge_hw_virtualpath));
1654}
#define VXGE_HW_DEVICE_TIM_INT_MASK_RESET(m0, m1, i)
#define VXGE_HW_VP_NOT_OPEN

References memset(), __vxge_hw_device::tim_int_mask0, __vxge_hw_device::tim_int_mask1, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, VXGE_HW_DEVICE_TIM_INT_MASK_RESET, VXGE_HW_VP_NOT_OPEN, and vxge_trace.

Referenced by __vxge_hw_vp_initialize(), vxge_hw_vpath_close(), and vxge_hw_vpath_open().

◆ vxge_hw_vpath_mtu_set()

enum vxge_hw_status vxge_hw_vpath_mtu_set ( struct __vxge_hw_virtualpath * vpath,
u32 new_mtu )

Definition at line 1662 of file vxge_config.c.

1663{
1664 u64 val64;
1666
1667 vxge_trace();
1668
1669 new_mtu += VXGE_HW_MAC_HEADER_MAX_SIZE;
1670
1671 if ((new_mtu < VXGE_HW_MIN_MTU) || (new_mtu > vpath->max_mtu))
1673
1674 val64 = readq(&vpath->vp_reg->rxmac_vcfg0);
1675
1676 val64 &= ~VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN(0x3fff);
1677 val64 |= VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN(new_mtu);
1678
1679 writeq(val64, &vpath->vp_reg->rxmac_vcfg0);
1680
1681 return status;
1682}
#define VXGE_HW_MIN_MTU
Definition vxge_config.h:34
@ VXGE_HW_ERR_INVALID_MTU_SIZE
Definition vxge_config.h:90

References __vxge_hw_virtualpath::max_mtu, readq, vxge_hw_vpath_reg::rxmac_vcfg0, status, u32, __vxge_hw_virtualpath::vp_reg, VXGE_HW_ERR_INVALID_MTU_SIZE, VXGE_HW_MAC_HEADER_MAX_SIZE, VXGE_HW_MIN_MTU, VXGE_HW_OK, VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN, vxge_trace, and writeq.

Referenced by vxge_open().

◆ vxge_hw_vpath_open()

enum vxge_hw_status vxge_hw_vpath_open ( struct __vxge_hw_device * hldev,
struct vxge_vpath * vpath )

Definition at line 1691 of file vxge_config.c.

1692{
1693 struct __vxge_hw_virtualpath *vpathh;
1695
1696 vxge_trace();
1697
1698 vpathh = &hldev->virtual_path;
1699
1700 if (vpath->vp_open == VXGE_HW_VP_OPEN) {
1702 goto vpath_open_exit1;
1703 }
1704
1706 if (status != VXGE_HW_OK)
1707 goto vpath_open_exit1;
1708
1709 status = __vxge_hw_fifo_create(vpathh, &vpathh->fifoh);
1710 if (status != VXGE_HW_OK)
1711 goto vpath_open_exit2;
1712
1713 status = __vxge_hw_ring_create(vpathh, &vpathh->ringh);
1714 if (status != VXGE_HW_OK)
1715 goto vpath_open_exit3;
1716
1718
1719 return VXGE_HW_OK;
1720
1721vpath_open_exit3:
1722 __vxge_hw_fifo_delete(&vpathh->fifoh);
1723vpath_open_exit2:
1725vpath_open_exit1:
1726 return status;
1727}
struct __vxge_hw_fifo fifoh
enum vxge_hw_status __vxge_hw_fifo_delete(struct __vxge_hw_fifo *fifo)
void __vxge_hw_vpath_prc_configure(struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_fifo_create(struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_fifo *fifo)
enum vxge_hw_status __vxge_hw_vp_initialize(struct __vxge_hw_device *hldev, u32 vp_id, struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_ring_create(struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_ring *ring)
@ VXGE_HW_ERR_INVALID_STATE
Definition vxge_config.h:99

References __vxge_hw_fifo_create(), __vxge_hw_fifo_delete(), __vxge_hw_ring_create(), __vxge_hw_vp_initialize(), __vxge_hw_vp_terminate(), __vxge_hw_vpath_prc_configure(), __vxge_hw_virtualpath::fifoh, __vxge_hw_device::first_vp_id, __vxge_hw_virtualpath::hldev, __vxge_hw_virtualpath::ringh, status, __vxge_hw_device::virtual_path, vxge_vpath::vp_open, VXGE_HW_ERR_INVALID_STATE, VXGE_HW_OK, VXGE_HW_VP_OPEN, and vxge_trace.

Referenced by vxge_open_vpaths().

◆ vxge_hw_vpath_rx_doorbell_init()

void vxge_hw_vpath_rx_doorbell_init ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1738 of file vxge_config.c.

1739{
1740 u64 new_count, val64;
1741
1742 vxge_trace();
1743
1744 if (vpath->hldev->titan1) {
1745 new_count = readq(&vpath->vp_reg->rxdmem_size);
1746 new_count &= 0x1fff;
1747 } else
1748 new_count = VXGE_HW_RING_RXD_QWORDS_MODE_1 * 4;
1749
1750 val64 = (VXGE_HW_RXDMEM_SIZE_PRC_RXDMEM_SIZE(new_count));
1751
1753 &vpath->vp_reg->prc_rxd_doorbell);
1754}
#define VXGE_HW_RING_RXD_QWORDS_MODE_1
#define VXGE_HW_PRC_RXD_DOORBELL_NEW_QW_CNT(val)
Definition vxge_reg.h:4099
#define VXGE_HW_RXDMEM_SIZE_PRC_RXDMEM_SIZE(val)
Definition vxge_reg.h:4103

References __vxge_hw_virtualpath::hldev, vxge_hw_vpath_reg::prc_rxd_doorbell, readq, vxge_hw_vpath_reg::rxdmem_size, __vxge_hw_device::titan1, __vxge_hw_virtualpath::vp_reg, VXGE_HW_PRC_RXD_DOORBELL_NEW_QW_CNT, VXGE_HW_RING_RXD_QWORDS_MODE_1, VXGE_HW_RXDMEM_SIZE_PRC_RXDMEM_SIZE, vxge_trace, and writeq.

Referenced by vxge_open().

◆ vxge_hw_vpath_close()

enum vxge_hw_status vxge_hw_vpath_close ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1761 of file vxge_config.c.

1762{
1763 struct __vxge_hw_device *devh = NULL;
1764 u32 vp_id = vpath->vp_id;
1766
1767 vxge_trace();
1768
1769 devh = vpath->hldev;
1770
1771 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN) {
1773 goto vpath_close_exit;
1774 }
1775
1776 devh->vpaths_deployed &= ~vxge_mBIT(vp_id);
1777
1779
1781
1782 __vxge_hw_vp_terminate(devh, vpath);
1783
1785
1786vpath_close_exit:
1787 return status;
1788}
@ VXGE_HW_ERR_VPATH_NOT_OPEN
Definition vxge_config.h:87

References __vxge_hw_fifo_delete(), __vxge_hw_ring_delete(), __vxge_hw_vp_terminate(), __vxge_hw_virtualpath::fifoh, __vxge_hw_virtualpath::hldev, NULL, __vxge_hw_virtualpath::ringh, status, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, __vxge_hw_device::vpaths_deployed, VXGE_HW_ERR_VPATH_NOT_OPEN, VXGE_HW_OK, VXGE_HW_VP_NOT_OPEN, vxge_mBIT, and vxge_trace.

Referenced by vxge_close_vpaths().

◆ vxge_hw_vpath_reset()

enum vxge_hw_status vxge_hw_vpath_reset ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1794 of file vxge_config.c.

1795{
1797 u32 vp_id;
1798
1799 vxge_trace();
1800
1801 vp_id = vpath->vp_id;
1802
1803 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN) {
1805 goto exit;
1806 }
1807
1808 status = __vxge_hw_vpath_reset(vpath->hldev, vp_id);
1809exit:
1810 return status;
1811}

References __vxge_hw_vpath_reset(), __vxge_hw_virtualpath::hldev, status, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, VXGE_HW_ERR_VPATH_NOT_OPEN, VXGE_HW_VP_NOT_OPEN, and vxge_trace.

Referenced by vxge_reset_all_vpaths().

◆ vxge_hw_vpath_recover_from_reset()

enum vxge_hw_status vxge_hw_vpath_recover_from_reset ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1819 of file vxge_config.c.

1820{
1822 struct __vxge_hw_device *hldev;
1823 u32 vp_id;
1824
1825 vxge_trace();
1826
1827 vp_id = vpath->vp_id;
1828 hldev = vpath->hldev;
1829
1830 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN) {
1832 goto exit;
1833 }
1834
1836 if (status != VXGE_HW_OK)
1837 goto exit;
1838
1839 status = __vxge_hw_vpath_initialize(hldev, vp_id);
1840 if (status != VXGE_HW_OK)
1841 goto exit;
1842
1844
1845exit:
1846 return status;
1847}

References __vxge_hw_vpath_initialize(), __vxge_hw_vpath_prc_configure(), __vxge_hw_vpath_reset_check(), __vxge_hw_virtualpath::hldev, status, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, VXGE_HW_ERR_VPATH_NOT_OPEN, VXGE_HW_OK, VXGE_HW_VP_NOT_OPEN, and vxge_trace.

Referenced by vxge_reset_all_vpaths().

◆ vxge_hw_vpath_enable()

void vxge_hw_vpath_enable ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1855 of file vxge_config.c.

1856{
1857 struct __vxge_hw_device *hldev;
1858 u64 val64;
1859
1860 vxge_trace();
1861
1862 hldev = vpath->hldev;
1863
1865 1 << (16 - vpath->vp_id));
1866
1868 &hldev->common_reg->cmn_rsthdlr_cfg1);
1869}
#define VXGE_HW_CMN_RSTHDLR_CFG1_CLR_VPATH_RESET(val)
Definition vxge_reg.h:765

References __vxge_hw_pio_mem_write32_upper(), vxge_hw_common_reg::cmn_rsthdlr_cfg1, __vxge_hw_device::common_reg, __vxge_hw_virtualpath::hldev, u32, __vxge_hw_virtualpath::vp_id, vxge_bVALn, VXGE_HW_CMN_RSTHDLR_CFG1_CLR_VPATH_RESET, and vxge_trace.

Referenced by vxge_open().