Lines Matching defs:nic
98 struct VirtNetif *nic = GetVirtnetIf(netDev);
99 struct VirtnetConfig *conf = (struct VirtnetConfig *)(nic->dev.base + VIRTMMIO_REG_CONFIG);
139 static int32_t InitTxFreelist(struct VirtNetif *nic)
143 for (i = 0; i < nic->dev.vq[1].qsz - 1; i++) {
144 nic->dev.vq[1].desc[i].flag = VIRTQ_DESC_F_NEXT;
145 nic->dev.vq[1].desc[i].next = i + 1;
147 nic->tFreeHdr = 0;
148 nic->tFreeNum = nic->dev.vq[1].qsz;
150 return OsalSpinInit(&nic->transLock);
153 static void FreeTxEntry(struct VirtNetif *nic, uint16_t head)
155 struct Virtq *q = &nic->dev.vq[1];
160 OsalSpinLock(&nic->transLock);
161 if (nic->tFreeNum > 0) {
162 q->desc[idx].next = nic->tFreeHdr;
165 nic->tFreeNum += PER_TX_ENTRIES;
166 nic->tFreeHdr = head;
167 nb = nic->tbufRec[idx];
168 OsalSpinUnlock(&nic->transLock);
174 static void PopulateRxBuffer(struct VirtNetif *nic)
178 struct Virtq *q = &nic->dev.vq[0];
181 paddr = VMM_TO_DMA_ADDR((VADDR_T)nic->rbuf[i]);
191 static int32_t ConfigQueue(struct VirtNetif *nic)
196 base = ALIGN((VADDR_T)nic + sizeof(struct VirtNetif), VIRTQ_ALIGN_DESC);
199 if (VirtmmioConfigQueue(&nic->dev, base, qsz, VIRTQ_NUM) == 0) {
203 PopulateRxBuffer(nic);
205 return InitTxFreelist(nic);
208 static uint16_t GetTxFreeEntry(struct VirtNetif *nic)
215 OsalSpinLockIrqSave(&nic->transLock, &intSave);
216 if (PER_TX_ENTRIES > nic->tFreeNum) {
217 OsalSpinUnlockIrqRestore(&nic->transLock, &intSave);
226 nic->tFreeNum -= PER_TX_ENTRIES;
227 head = nic->tFreeHdr;
228 idx = nic->dev.vq[1].desc[head].next;
230 nic->tFreeHdr = nic->dev.vq[1].desc[idx].next;
231 OsalSpinUnlockIrqRestore(&nic->transLock, &intSave);
232 nic->dev.vq[1].desc[idx].flag &= ~VIRTQ_DESC_F_NEXT;
240 struct VirtNetif *nic = GetVirtnetIf(netDev);
241 struct Virtq *trans = &nic->dev.vq[1];
243 head = GetTxFreeEntry(nic);
244 trans->desc[head].pAddr = VMM_TO_DMA_ADDR((PADDR_T)&nic->vnHdr);
250 nic->tbufRec[idx] = p;
256 OSAL_WRITEL(1, nic->dev.base + VIRTMMIO_REG_QUEUENOTIFY);
264 struct VirtNetif *nic = GetVirtnetIf(netDev);
277 (void)memcpy_s(payload, len, nic->rbuf[e->id] + sizeof(struct VirtnetHdr), len);
284 struct VirtNetif *nic = GetVirtnetIf(netDev);
285 struct Virtq *q = &nic->dev.vq[0];
321 OSAL_WRITEL(0, nic->dev.base + VIRTMMIO_REG_QUEUENOTIFY);
325 static void VirtnetTxHandle(struct VirtNetif *nic)
327 struct Virtq *q = &nic->dev.vq[1];
335 FreeTxEntry(nic, e->id);
345 struct VirtNetif *nic = GetVirtnetIf(netDev);
347 if (!(OSAL_READL(nic->dev.base + VIRTMMIO_REG_INTERRUPTSTATUS) & VIRTMMIO_IRQ_NOTIFY_USED)) {
353 VirtnetTxHandle(nic);
355 OSAL_WRITEL(VIRTMMIO_IRQ_NOTIFY_USED, nic->dev.base + VIRTMMIO_REG_INTERRUPTACK);
369 struct VirtNetif *nic = NULL;
373 nic = LOS_DmaMemAlloc(NULL, len, sizeof(void *), DMA_CACHE);
374 if (nic == NULL) {
375 HDF_LOGE("[%s]alloc nic memory failed", __func__);
378 memset_s(nic, len, 0, len);
379 GET_NET_DEV_PRIV(netDev) = nic;
381 if (!VirtmmioDiscover(VIRTMMIO_DEVICE_ID_NET, &nic->dev)) {
385 VirtmmioInitBegin(&nic->dev);
387 if (!VirtmmioNegotiate(&nic->dev, Feature0, Feature1, netDev)) {
392 if ((ret = ConfigQueue(nic)) != HDF_SUCCESS) {
396 ret = OsalRegisterIrq(nic->dev.irq, OSAL_IRQF_TRIGGER_NONE, (OsalIRQHandle)VirtnetIRQhandle,
402 nic->dev.irq |= ~_IRQ_MASK;
404 VritmmioInitEnd(&nic->dev);
408 VirtmmioInitFailed(&nic->dev);
414 struct VirtNetif *nic = GetVirtnetIf(netDev);
416 if (nic && (nic->dev.irq & ~_IRQ_MASK)) {
417 OsalUnregisterIrq(nic->dev.irq & _IRQ_MASK, netDev);
419 if (nic) {
420 LOS_DmaMemFree(nic);
496 struct VirtNetif *nic = GetVirtnetIf(netDev);
497 nic->dev.vq[0].avail->index = nic->dev.vq[0].qsz;
498 OSAL_WRITEL(0, nic->dev.base + VIRTMMIO_REG_QUEUENOTIFY);