datos de transmisión antes de entrar en la función de transmisión, que primero se ven e100_up () - > e100_alloc_cbs función: static int e100_alloc_cbs (struct nic * nic) {cb struct * cb; unsigned int i, count = NIC- > params.cbs.count; NIC- > cuc_cmd = cuc_start; NIC- > cb_to_use = NIC- > cb_to_send = NIC- > cb_to_clean = NULL; NIC- > cbs_avail = 0;
//aplicaciones lineales DMA, donde el retorno es la dirección virtual, para su uso NIC-> CPU; cbs = pci_alloc_consistent (NIC-> pdev, sizeof (CB struct) * recuento, &NIC-> cbs_dma_addr); if (! NIC- > cbs) -ENOMEM regreso; //establecer una memoria intermedia de transmisión para un anular (cb = NIC- > cbs, i = 0; i < cuenta; cb ++, i ++) {CB > siguiente = (i + 1 < count) cb + 1: NIC- > cbs; CB > prev = (i == 0) NIC- > cbs + contar - 1: ?? CB - 1; CB > dma_addr = NIC- > cbs_dma_addr + i * sizeof (cb struct); CB > link = cpu_to_le32 (NIC- > cbs_dma_addr + ((i + 1)% count) * sizeof (cb struct)); CB > skb = NULL;} //inicialización de los punteros para apuntar a la posición inicial de memoria tampón NIC- > cb_to_use = NIC- > cb_to_send = ni c- > cb_to_clean = NIC- > cbs; NIC- > cbs_avail = recuento; return 0;} En esta sección de código, se completa la preparación de la transmisión, el establecimiento de una memoria intermedia de anillo de transmisión. Cuando el número de juego de transmisión, siempre que los datos en la memoria intermedia de datos a un llamadas finales DevS- > función hard_start_xmit. En el código e100, es decir e100_xmit_frame () mirar en el interior: static int e100_xmit_frame (struct sk_buff * skb, struct net_device * netdev) {struct nic * nic = netdev_priv (netdev); int err; si (NIC- > banderas &ich_10h_workaround) {e100_exec_cmd (nic, cuc_nop, 0); udelay (1);} err = e100_exec_cb (nic, SKB, e100_xmit_prepare); conmutador (err) {case -ENOSPC: /* Nos cola skb, pero ahora estamos fuera del espacio * /netif_stop_queue (netdev); break; caso -ENOMEM: .. /* Este es un error de hardware - log que * /DPRINTK (TX_ERR, depurar, " Fuera de recursos TX, volviendo skb \\ n "); netif_stop_queue (netdev); return 1;} netdev- > trans_start = jiffies; return 0;} seguir para realizar un seguimiento en e100_exec_cb (nic, SKB, e100_xmit_prepare); estática inline int e100_exec_cb (struct nic * nic, struct sk_buff * skb , nula (* cb_prepare) (struct nic *, estructura cb *, estructura sk_buff *)) {struct cb * cb; banderas sin firmar largos; int err = 0; spin_lock_irqsave (&NIC-> cb_lock, banderas), si ( improbable (NIC- >! cbs_avail)) {err = -ENOMEM; err_unlock Goto;}
//el skb En el búfer de transmisión anular //cb_to_use: transmitir la posición de uso búfer en cb = NIC- > cb_to_use; NIC- > cb_to_use = CB > siguiente; NIC- > cbs_avail -; CB > skb = skb; si (poco probable (NIC-> cbs_avail)!) err = -ENOSPC; cb_prepare (nic, CB, SKB); /* el orden es importante de lo contrario vamos a estar en una carrera con h /w: * Juego de S bits en actual en primer lugar, y luego despejado S bits en anteriores * /CB > comando
La primera consideración para muchos entusiastas de Linux al comprar una computadora nueva es si la
Hemos sido de una manera convencional para completar una tarea hasta que sepamos que hay un mejor en
o generado a partir del proceso de compilación y enlazado vmlinux visualizarla, unidos por un grupo
Todos saben qué es una dirección IP, ¿verdad? Se asignan a dispositivos en la red para representarlo
Método de conversión de hora de Linux
Cómo usar Linux para establecer un servidor de acceso telefónico
Ubuntu de 64 bits no puede instalar la solución de biblioteca compatible de 32 bits
Solaris restart syslog configure el registro de autenticación por separado
Cómo ver el registro de operación del usuario después de iniciar sesión en Linux
Linux I2C impulsada Introducción a la arquitectura
Método de configuración de permisos del modo de función mkdir de Linux
Cómo modificar la dirección MAC de Linux en la máquina virtual VMware
Sistema operativo Linux programación en red estructura común
Cómo reinstalar Linux en el sistema operativo Linux
cambiar fácilmente entre las aplicaciones mac idiomas
Tutorial de configuración de variables de entorno de Shell Las variables de entorno de
¡Esencial! Win XP sistema de instalación de habilidades clásicas
Win2003 ASP.NET - Herencia de configuración
Principio de activación de KMS de Win8 detallado
Solución perdida de la tabla de partición del disco duro de la computadora WinXP
¿Cómo "fácil de usar" los botones del sistema Win8.1 /RT 8.1?
¿Cómo arreglar el sistema Win10 al menú de inicio?
Win7 permite que los medios admitan más formatos de video
Win7 acceso inalámbrico a Internet
¿No se puede usar la tarjeta de red inalámbrica RTL8192DE de Win10? ¿Cómo hacerlo? Solución