Message type for DL_{READ,WRITE}V_S
Change-Id: I6e25e8e994b0bdec2bb54f50e6db08e6e935c819
This commit is contained in:
parent
992b76139f
commit
1576ef5542
16 changed files with 128 additions and 96 deletions
|
@ -777,12 +777,13 @@ static void atl2_readv(const message *m, int from_int)
|
||||||
left = count;
|
left = count;
|
||||||
pos = rxd->data;
|
pos = rxd->data;
|
||||||
|
|
||||||
for (i = 0; i < m->DL_COUNT && left > 0; i += batch) {
|
for (i = 0; i < m->m_net_netdrv_dl_readv_s.count && left > 0; i += batch) {
|
||||||
/* Copy in the next batch. */
|
/* Copy in the next batch. */
|
||||||
batch = MIN(m->DL_COUNT - i, NR_IOREQS);
|
batch = MIN(m->m_net_netdrv_dl_readv_s.count - i, NR_IOREQS);
|
||||||
|
|
||||||
r = sys_safecopyfrom(m->m_source, m->DL_GRANT, off,
|
r = sys_safecopyfrom(m->m_source,
|
||||||
(vir_bytes) iovec, batch * sizeof(iovec[0]));
|
m->m_net_netdrv_dl_readv_s.grant, off, (vir_bytes) iovec,
|
||||||
|
batch * sizeof(iovec[0]));
|
||||||
if (r != OK)
|
if (r != OK)
|
||||||
panic("vector copy failed: %d", r);
|
panic("vector copy failed: %d", r);
|
||||||
|
|
||||||
|
@ -874,12 +875,13 @@ static void atl2_writev(const message *m, int from_int)
|
||||||
pos = (state.txd_tail + state.txd_num +
|
pos = (state.txd_tail + state.txd_num +
|
||||||
sizeof(u32_t)) % ATL2_TXD_BUFSIZE;
|
sizeof(u32_t)) % ATL2_TXD_BUFSIZE;
|
||||||
|
|
||||||
for (i = 0; i < m->DL_COUNT; i += batch) {
|
for (i = 0; i < m->m_net_netdrv_dl_writev_s.count; i += batch) {
|
||||||
/* Copy in the next batch. */
|
/* Copy in the next batch. */
|
||||||
batch = MIN(m->DL_COUNT - i, NR_IOREQS);
|
batch = MIN(m->m_net_netdrv_dl_writev_s.count - i, NR_IOREQS);
|
||||||
|
|
||||||
r = sys_safecopyfrom(m->m_source, m->DL_GRANT, off,
|
r = sys_safecopyfrom(m->m_source,
|
||||||
(vir_bytes) iovec, batch * sizeof(iovec[0]));
|
m->m_net_netdrv_dl_writev_s.grant, off, (vir_bytes) iovec,
|
||||||
|
batch * sizeof(iovec[0]));
|
||||||
if (r != OK)
|
if (r != OK)
|
||||||
panic("vector copy failed: %d", r);
|
panic("vector copy failed: %d", r);
|
||||||
|
|
||||||
|
|
|
@ -470,10 +470,11 @@ static void do_vread_s(const message * mp, int from_int)
|
||||||
client layer
|
client layer
|
||||||
*/
|
*/
|
||||||
dep->de_read_iovec.iod_proc_nr = mp->m_source;
|
dep->de_read_iovec.iod_proc_nr = mp->m_source;
|
||||||
de_get_userdata_s(mp->m_source, (cp_grant_id_t) mp->DL_GRANT, 0,
|
de_get_userdata_s(mp->m_source, mp->m_net_netdrv_dl_readv_s.grant, 0,
|
||||||
mp->DL_COUNT, dep->de_read_iovec.iod_iovec);
|
mp->m_net_netdrv_dl_readv_s.count,
|
||||||
dep->de_read_iovec.iod_iovec_s = mp->DL_COUNT;
|
dep->de_read_iovec.iod_iovec);
|
||||||
dep->de_read_iovec.iod_grant = (cp_grant_id_t) mp->DL_GRANT;
|
dep->de_read_iovec.iod_iovec_s = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
|
dep->de_read_iovec.iod_grant = mp->m_net_netdrv_dl_readv_s.grant;
|
||||||
dep->de_read_iovec.iod_iovec_offset = 0;
|
dep->de_read_iovec.iod_iovec_offset = 0;
|
||||||
size = de_calc_iov_size(&dep->de_read_iovec);
|
size = de_calc_iov_size(&dep->de_read_iovec);
|
||||||
if (size < ETH_MAX_PACK_SIZE)
|
if (size < ETH_MAX_PACK_SIZE)
|
||||||
|
@ -823,10 +824,10 @@ static void do_vwrite_s(const message * mp, int from_int){
|
||||||
buffer = descr->buf1;
|
buffer = descr->buf1;
|
||||||
iovp = &dep->de_write_iovec;
|
iovp = &dep->de_write_iovec;
|
||||||
iovp->iod_proc_nr = mp->m_source;
|
iovp->iod_proc_nr = mp->m_source;
|
||||||
de_get_userdata_s(mp->m_source, mp->DL_GRANT, 0,
|
de_get_userdata_s(mp->m_source, mp->m_net_netdrv_dl_writev_s.grant, 0,
|
||||||
mp->DL_COUNT, iovp->iod_iovec);
|
mp->m_net_netdrv_dl_writev_s.count, iovp->iod_iovec);
|
||||||
iovp->iod_iovec_s = mp->DL_COUNT;
|
iovp->iod_iovec_s = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
iovp->iod_grant = (cp_grant_id_t) mp->DL_GRANT;
|
iovp->iod_grant = mp->m_net_netdrv_dl_writev_s.grant;
|
||||||
iovp->iod_iovec_offset = 0;
|
iovp->iod_iovec_offset = 0;
|
||||||
totalsize = size = de_calc_iov_size(iovp);
|
totalsize = size = de_calc_iov_size(iovp);
|
||||||
if (size < ETH_MIN_PACK_SIZE || size > ETH_MAX_PACK_SIZE)
|
if (size < ETH_MIN_PACK_SIZE || size > ETH_MAX_PACK_SIZE)
|
||||||
|
|
|
@ -364,7 +364,7 @@ int from_int;
|
||||||
|
|
||||||
dep= &de_state;
|
dep= &de_state;
|
||||||
|
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
dep->de_client= mp->m_source;
|
dep->de_client= mp->m_source;
|
||||||
|
|
||||||
if (dep->de_mode == DEM_SINK)
|
if (dep->de_mode == DEM_SINK)
|
||||||
|
@ -391,13 +391,13 @@ int from_int;
|
||||||
}
|
}
|
||||||
assert(!(dep->de_flags & DEF_PACK_SEND));
|
assert(!(dep->de_flags & DEF_PACK_SEND));
|
||||||
|
|
||||||
get_userdata_s(mp->m_source, mp->DL_GRANT, 0,
|
get_userdata_s(mp->m_source, mp->m_net_netdrv_dl_writev_s.grant, 0,
|
||||||
(count > IOVEC_NR ? IOVEC_NR : count) *
|
(count > IOVEC_NR ? IOVEC_NR : count) *
|
||||||
sizeof(dep->de_write_iovec_s.iod_iovec[0]),
|
sizeof(dep->de_write_iovec_s.iod_iovec[0]),
|
||||||
dep->de_write_iovec_s.iod_iovec);
|
dep->de_write_iovec_s.iod_iovec);
|
||||||
dep->de_write_iovec_s.iod_iovec_s = count;
|
dep->de_write_iovec_s.iod_iovec_s = count;
|
||||||
dep->de_write_iovec_s.iod_proc_nr = mp->m_source;
|
dep->de_write_iovec_s.iod_proc_nr = mp->m_source;
|
||||||
dep->de_write_iovec_s.iod_grant = mp->DL_GRANT;
|
dep->de_write_iovec_s.iod_grant = mp->m_net_netdrv_dl_writev_s.grant;
|
||||||
dep->de_write_iovec_s.iod_iovec_offset = 0;
|
dep->de_write_iovec_s.iod_iovec_offset = 0;
|
||||||
|
|
||||||
dep->de_tmp_iovec_s = dep->de_write_iovec_s;
|
dep->de_tmp_iovec_s = dep->de_write_iovec_s;
|
||||||
|
@ -451,7 +451,7 @@ message *mp;
|
||||||
|
|
||||||
dep= &de_state;
|
dep= &de_state;
|
||||||
|
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
dep->de_client= mp->m_source;
|
dep->de_client= mp->m_source;
|
||||||
if (dep->de_mode == DEM_SINK)
|
if (dep->de_mode == DEM_SINK)
|
||||||
{
|
{
|
||||||
|
@ -464,13 +464,13 @@ message *mp;
|
||||||
if(dep->de_flags & DEF_READING)
|
if(dep->de_flags & DEF_READING)
|
||||||
panic("dp8390: read already in progress");
|
panic("dp8390: read already in progress");
|
||||||
|
|
||||||
get_userdata_s(mp->m_source, mp->DL_GRANT, 0,
|
get_userdata_s(mp->m_source, mp->m_net_netdrv_dl_readv_s.grant, 0,
|
||||||
(count > IOVEC_NR ? IOVEC_NR : count) *
|
(count > IOVEC_NR ? IOVEC_NR : count) *
|
||||||
sizeof(dep->de_read_iovec_s.iod_iovec[0]),
|
sizeof(dep->de_read_iovec_s.iod_iovec[0]),
|
||||||
dep->de_read_iovec_s.iod_iovec);
|
dep->de_read_iovec_s.iod_iovec);
|
||||||
dep->de_read_iovec_s.iod_iovec_s = count;
|
dep->de_read_iovec_s.iod_iovec_s = count;
|
||||||
dep->de_read_iovec_s.iod_proc_nr = mp->m_source;
|
dep->de_read_iovec_s.iod_proc_nr = mp->m_source;
|
||||||
dep->de_read_iovec_s.iod_grant = mp->DL_GRANT;
|
dep->de_read_iovec_s.iod_grant = mp->m_net_netdrv_dl_readv_s.grant;
|
||||||
dep->de_read_iovec_s.iod_iovec_offset = 0;
|
dep->de_read_iovec_s.iod_iovec_offset = 0;
|
||||||
|
|
||||||
dep->de_tmp_iovec_s = dep->de_read_iovec_s;
|
dep->de_tmp_iovec_s = dep->de_read_iovec_s;
|
||||||
|
|
|
@ -363,10 +363,10 @@ static void do_vwrite_s(const message * mp)
|
||||||
panic("send already in progress ");
|
panic("send already in progress ");
|
||||||
|
|
||||||
dep->de_write_iovec.iod_proc_nr = mp->m_source;
|
dep->de_write_iovec.iod_proc_nr = mp->m_source;
|
||||||
get_userdata_s(mp->m_source, mp->DL_GRANT, 0,
|
get_userdata_s(mp->m_source, mp->m_net_netdrv_dl_writev_s.grant, 0,
|
||||||
mp->DL_COUNT, dep->de_write_iovec.iod_iovec);
|
mp->m_net_netdrv_dl_writev_s.count, dep->de_write_iovec.iod_iovec);
|
||||||
dep->de_write_iovec.iod_iovec_s = mp->DL_COUNT;
|
dep->de_write_iovec.iod_iovec_s = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
dep->de_write_iovec.iod_grant = (cp_grant_id_t) mp->DL_GRANT;
|
dep->de_write_iovec.iod_grant = mp->m_net_netdrv_dl_writev_s.grant;
|
||||||
dep->de_write_iovec.iod_iovec_offset = 0;
|
dep->de_write_iovec.iod_iovec_offset = 0;
|
||||||
size = calc_iovec_size(&dep->de_write_iovec);
|
size = calc_iovec_size(&dep->de_write_iovec);
|
||||||
if (size < ETH_MIN_PACK_SIZE || size > ETH_MAX_PACK_SIZE)
|
if (size < ETH_MIN_PACK_SIZE || size > ETH_MAX_PACK_SIZE)
|
||||||
|
@ -401,10 +401,10 @@ static void do_vread_s(const message * mp)
|
||||||
panic("read already in progress");
|
panic("read already in progress");
|
||||||
|
|
||||||
dep->de_read_iovec.iod_proc_nr = mp->m_source;
|
dep->de_read_iovec.iod_proc_nr = mp->m_source;
|
||||||
get_userdata_s(mp->m_source, (cp_grant_id_t) mp->DL_GRANT, 0,
|
get_userdata_s(mp->m_source, mp->m_net_netdrv_dl_readv_s.grant, 0,
|
||||||
mp->DL_COUNT, dep->de_read_iovec.iod_iovec);
|
mp->m_net_netdrv_dl_readv_s.count, dep->de_read_iovec.iod_iovec);
|
||||||
dep->de_read_iovec.iod_iovec_s = mp->DL_COUNT;
|
dep->de_read_iovec.iod_iovec_s = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
dep->de_read_iovec.iod_grant = (cp_grant_id_t) mp->DL_GRANT;
|
dep->de_read_iovec.iod_grant = mp->m_net_netdrv_dl_readv_s.grant;
|
||||||
dep->de_read_iovec.iod_iovec_offset = 0;
|
dep->de_read_iovec.iod_iovec_offset = 0;
|
||||||
size = calc_iovec_size(&dep->de_read_iovec);
|
size = calc_iovec_size(&dep->de_read_iovec);
|
||||||
if (size < ETH_MAX_PACK_SIZE) panic(SizeErrMsg, size);
|
if (size < ETH_MAX_PACK_SIZE) panic(SizeErrMsg, size);
|
||||||
|
|
|
@ -607,15 +607,16 @@ int from_int;
|
||||||
e->status |= E1000_WRITING;
|
e->status |= E1000_WRITING;
|
||||||
|
|
||||||
/* Must be a sane vector count. */
|
/* Must be a sane vector count. */
|
||||||
assert(e->tx_message.DL_COUNT > 0);
|
assert(e->tx_message.m_net_netdrv_dl_writev_s.count > 0);
|
||||||
assert(e->tx_message.DL_COUNT < E1000_IOVEC_NR);
|
assert(e->tx_message.m_net_netdrv_dl_writev_s.count < E1000_IOVEC_NR);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy the I/O vector table.
|
* Copy the I/O vector table.
|
||||||
*/
|
*/
|
||||||
if ((r = sys_safecopyfrom(e->tx_message.m_source,
|
if ((r = sys_safecopyfrom(e->tx_message.m_source,
|
||||||
e->tx_message.DL_GRANT, 0,
|
e->tx_message.m_net_netdrv_dl_writev_s.grant, 0,
|
||||||
(vir_bytes) iovec, e->tx_message.DL_COUNT *
|
(vir_bytes) iovec,
|
||||||
|
e->tx_message.m_net_netdrv_dl_writev_s.count *
|
||||||
sizeof(iovec_s_t))) != OK)
|
sizeof(iovec_s_t))) != OK)
|
||||||
{
|
{
|
||||||
panic("sys_safecopyfrom() failed: %d", r);
|
panic("sys_safecopyfrom() failed: %d", r);
|
||||||
|
@ -629,7 +630,7 @@ int from_int;
|
||||||
e->name, head, tail));
|
e->name, head, tail));
|
||||||
|
|
||||||
/* Loop vector elements. */
|
/* Loop vector elements. */
|
||||||
for (i = 0; i < e->tx_message.DL_COUNT; i++)
|
for (i = 0; i < e->tx_message.m_net_netdrv_dl_writev_s.count; i++)
|
||||||
{
|
{
|
||||||
size = iovec[i].iov_size < (E1000_IOBUF_SIZE - bytes) ?
|
size = iovec[i].iov_size < (E1000_IOBUF_SIZE - bytes) ?
|
||||||
iovec[i].iov_size : (E1000_IOBUF_SIZE - bytes);
|
iovec[i].iov_size : (E1000_IOBUF_SIZE - bytes);
|
||||||
|
@ -651,7 +652,7 @@ int from_int;
|
||||||
desc->length = size;
|
desc->length = size;
|
||||||
|
|
||||||
/* Marks End-of-Packet. */
|
/* Marks End-of-Packet. */
|
||||||
if (i == e->tx_message.DL_COUNT - 1)
|
if (i == e->tx_message.m_net_netdrv_dl_writev_s.count - 1)
|
||||||
{
|
{
|
||||||
desc->command = E1000_TX_CMD_EOP |
|
desc->command = E1000_TX_CMD_EOP |
|
||||||
E1000_TX_CMD_FCS |
|
E1000_TX_CMD_FCS |
|
||||||
|
@ -696,8 +697,8 @@ int from_int;
|
||||||
e->status |= E1000_READING;
|
e->status |= E1000_READING;
|
||||||
e->rx_size = 0;
|
e->rx_size = 0;
|
||||||
|
|
||||||
assert(e->rx_message.DL_COUNT > 0);
|
assert(e->rx_message.m_net_netdrv_dl_readv_s.count > 0);
|
||||||
assert(e->rx_message.DL_COUNT < E1000_IOVEC_NR);
|
assert(e->rx_message.m_net_netdrv_dl_readv_s.count < E1000_IOVEC_NR);
|
||||||
}
|
}
|
||||||
if (e->status & E1000_READING)
|
if (e->status & E1000_READING)
|
||||||
{
|
{
|
||||||
|
@ -705,8 +706,9 @@ int from_int;
|
||||||
* Copy the I/O vector table first.
|
* Copy the I/O vector table first.
|
||||||
*/
|
*/
|
||||||
if ((r = sys_safecopyfrom(e->rx_message.m_source,
|
if ((r = sys_safecopyfrom(e->rx_message.m_source,
|
||||||
e->rx_message.DL_GRANT, 0,
|
e->rx_message.m_net_netdrv_dl_readv_s.grant, 0,
|
||||||
(vir_bytes) iovec, e->rx_message.DL_COUNT *
|
(vir_bytes) iovec,
|
||||||
|
e->rx_message.m_net_netdrv_dl_readv_s.count *
|
||||||
sizeof(iovec_s_t))) != OK)
|
sizeof(iovec_s_t))) != OK)
|
||||||
{
|
{
|
||||||
panic("sys_safecopyfrom() failed: %d", r);
|
panic("sys_safecopyfrom() failed: %d", r);
|
||||||
|
@ -731,7 +733,8 @@ int from_int;
|
||||||
/*
|
/*
|
||||||
* Copy to vector elements.
|
* Copy to vector elements.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < e->rx_message.DL_COUNT && bytes < desc->length; i++)
|
for (i = 0; i < e->rx_message.m_net_netdrv_dl_readv_s.count &&
|
||||||
|
bytes < desc->length; i++)
|
||||||
{
|
{
|
||||||
size = iovec[i].iov_size < (desc->length - bytes) ?
|
size = iovec[i].iov_size < (desc->length - bytes) ?
|
||||||
iovec[i].iov_size : (desc->length - bytes);
|
iovec[i].iov_size : (desc->length - bytes);
|
||||||
|
|
|
@ -938,7 +938,7 @@ static void fxp_writev_s(const message *mp, int from_int)
|
||||||
|
|
||||||
fp= fxp_state;
|
fp= fxp_state;
|
||||||
|
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
fp->fxp_client= mp->m_source;
|
fp->fxp_client= mp->m_source;
|
||||||
|
|
||||||
assert(fp->fxp_mode == FM_ENABLED);
|
assert(fp->fxp_mode == FM_ENABLED);
|
||||||
|
@ -982,7 +982,7 @@ static void fxp_writev_s(const message *mp, int from_int)
|
||||||
assert(!(fp->fxp_flags & FF_PACK_SENT));
|
assert(!(fp->fxp_flags & FF_PACK_SENT));
|
||||||
|
|
||||||
iov_endpt= mp->m_source;
|
iov_endpt= mp->m_source;
|
||||||
iov_grant= mp->DL_GRANT;
|
iov_grant= mp->m_net_netdrv_dl_writev_s.grant;
|
||||||
|
|
||||||
size= 0;
|
size= 0;
|
||||||
o= 0;
|
o= 0;
|
||||||
|
@ -1081,7 +1081,7 @@ int from_int;
|
||||||
|
|
||||||
fp= fxp_state;
|
fp= fxp_state;
|
||||||
|
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
fp->fxp_client= mp->m_source;
|
fp->fxp_client= mp->m_source;
|
||||||
|
|
||||||
assert(fp->fxp_mode == FM_ENABLED);
|
assert(fp->fxp_mode == FM_ENABLED);
|
||||||
|
@ -1117,7 +1117,7 @@ int from_int;
|
||||||
packlen= rfd_res & RFDSZ_SIZE;
|
packlen= rfd_res & RFDSZ_SIZE;
|
||||||
|
|
||||||
iov_endpt = mp->m_source;
|
iov_endpt = mp->m_source;
|
||||||
iov_grant = mp->DL_GRANT;
|
iov_grant = mp->m_net_netdrv_dl_readv_s.grant;
|
||||||
|
|
||||||
size= 0;
|
size= 0;
|
||||||
o= 0;
|
o= 0;
|
||||||
|
|
|
@ -254,7 +254,7 @@ message *m;
|
||||||
reply.m_type = DL_CONF_REPLY;
|
reply.m_type = DL_CONF_REPLY;
|
||||||
reply.m_netdrv_net_dl_conf.stat = OK;
|
reply.m_netdrv_net_dl_conf.stat = OK;
|
||||||
memcpy(reply.m_netdrv_net_dl_conf.hw_addr,
|
memcpy(reply.m_netdrv_net_dl_conf.hw_addr,
|
||||||
lan8710a_state.address,
|
lan8710a_state.address.ea_addr,
|
||||||
sizeof(reply.m_netdrv_net_dl_conf.hw_addr));
|
sizeof(reply.m_netdrv_net_dl_conf.hw_addr));
|
||||||
mess_reply(m, &reply);
|
mess_reply(m, &reply);
|
||||||
}
|
}
|
||||||
|
@ -849,15 +849,17 @@ int from_int;
|
||||||
e->status |= LAN8710A_WRITING;
|
e->status |= LAN8710A_WRITING;
|
||||||
|
|
||||||
/* verify vector count */
|
/* verify vector count */
|
||||||
assert(mp->DL_COUNT > 0);
|
assert(mp->m_net_netdrv_dl_writev_s.count > 0);
|
||||||
assert(mp->DL_COUNT < LAN8710A_IOVEC_NR);
|
assert(mp->m_net_netdrv_dl_writev_s.count < LAN8710A_IOVEC_NR);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy the I/O vector table.
|
* Copy the I/O vector table.
|
||||||
*/
|
*/
|
||||||
if ((r = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, 0,
|
if ((r = sys_safecopyfrom(mp->m_source,
|
||||||
|
mp->m_net_netdrv_dl_writev_s.grant, 0,
|
||||||
(vir_bytes) iovec,
|
(vir_bytes) iovec,
|
||||||
mp->DL_COUNT * sizeof(iovec_s_t))) != OK) {
|
mp->m_net_netdrv_dl_writev_s.count *
|
||||||
|
sizeof(iovec_s_t))) != OK) {
|
||||||
panic("sys_safecopyfrom() failed: %d", r);
|
panic("sys_safecopyfrom() failed: %d", r);
|
||||||
}
|
}
|
||||||
/* setup descriptors */
|
/* setup descriptors */
|
||||||
|
@ -874,7 +876,7 @@ int from_int;
|
||||||
/* virtual address of buffer */
|
/* virtual address of buffer */
|
||||||
p_buf = e->p_tx_buf + e->tx_desc_idx * LAN8710A_IOBUF_SIZE;
|
p_buf = e->p_tx_buf + e->tx_desc_idx * LAN8710A_IOBUF_SIZE;
|
||||||
buf_data_len = 0;
|
buf_data_len = 0;
|
||||||
for (i = 0; i < mp->DL_COUNT; i++) {
|
for (i = 0; i < mp->m_net_netdrv_dl_writev_s.count; i++) {
|
||||||
if ((buf_data_len + iovec[i].iov_size)
|
if ((buf_data_len + iovec[i].iov_size)
|
||||||
> LAN8710A_IOBUF_SIZE) {
|
> LAN8710A_IOBUF_SIZE) {
|
||||||
panic("packet too long");
|
panic("packet too long");
|
||||||
|
@ -943,16 +945,17 @@ int from_int;
|
||||||
e->status |= LAN8710A_READING;
|
e->status |= LAN8710A_READING;
|
||||||
e->rx_size = 0;
|
e->rx_size = 0;
|
||||||
|
|
||||||
assert(e->rx_message.DL_COUNT > 0);
|
assert(e->rx_message.m_net_netdrv_dl_readv_s.count > 0);
|
||||||
assert(e->rx_message.DL_COUNT < LAN8710A_IOVEC_NR);
|
assert(e->rx_message.m_net_netdrv_dl_readv_s.count < LAN8710A_IOVEC_NR);
|
||||||
}
|
}
|
||||||
if (e->status & LAN8710A_READING) {
|
if (e->status & LAN8710A_READING) {
|
||||||
/*
|
/*
|
||||||
* Copy the I/O vector table first.
|
* Copy the I/O vector table first.
|
||||||
*/
|
*/
|
||||||
if ((r = sys_safecopyfrom(e->rx_message.m_source,
|
if ((r = sys_safecopyfrom(e->rx_message.m_source,
|
||||||
e->rx_message.DL_GRANT, 0, (vir_bytes) iovec,
|
e->rx_message.m_net_netdrv_dl_readv_s.grant, 0,
|
||||||
e->rx_message.DL_COUNT *
|
(vir_bytes) iovec,
|
||||||
|
e->rx_message.m_net_netdrv_dl_readv_s.count *
|
||||||
sizeof(iovec_s_t))) != OK) {
|
sizeof(iovec_s_t))) != OK) {
|
||||||
panic("sys_safecopyfrom() failed: %d", r);
|
panic("sys_safecopyfrom() failed: %d", r);
|
||||||
}
|
}
|
||||||
|
@ -987,7 +990,7 @@ int from_int;
|
||||||
pkt_data_len = 0;
|
pkt_data_len = 0;
|
||||||
buf_bytes = 0;
|
buf_bytes = 0;
|
||||||
p_buf = e->p_rx_buf + e->rx_desc_idx * LAN8710A_IOBUF_SIZE;
|
p_buf = e->p_rx_buf + e->rx_desc_idx * LAN8710A_IOBUF_SIZE;
|
||||||
for (i = 0; i < e->rx_message.DL_COUNT; i++) {
|
for (i = 0; i < e->rx_message.m_net_netdrv_dl_readv_s.count; i++) {
|
||||||
buf_len = p_rx_desc->buffer_length_off & 0xFFFF;
|
buf_len = p_rx_desc->buffer_length_off & 0xFFFF;
|
||||||
if (buf_bytes == buf_len) {
|
if (buf_bytes == buf_len) {
|
||||||
/* Whole buffer move to the next descriptor */
|
/* Whole buffer move to the next descriptor */
|
||||||
|
|
|
@ -1006,9 +1006,9 @@ static void do_vread_s(const message *mp)
|
||||||
ec= &ec_state;
|
ec= &ec_state;
|
||||||
|
|
||||||
ec->client= mp->m_source;
|
ec->client= mp->m_source;
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
|
|
||||||
r = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, 0,
|
r = sys_safecopyfrom(mp->m_source, mp->m_net_netdrv_dl_readv_s.grant, 0,
|
||||||
(vir_bytes)ec->read_iovec.iod_iovec,
|
(vir_bytes)ec->read_iovec.iod_iovec,
|
||||||
(count > IOVEC_NR ? IOVEC_NR : count) *
|
(count > IOVEC_NR ? IOVEC_NR : count) *
|
||||||
sizeof(iovec_s_t));
|
sizeof(iovec_s_t));
|
||||||
|
@ -1016,7 +1016,7 @@ static void do_vread_s(const message *mp)
|
||||||
panic("do_vread_s: sys_safecopyfrom failed: %d", r);
|
panic("do_vread_s: sys_safecopyfrom failed: %d", r);
|
||||||
ec->read_iovec.iod_iovec_s = count;
|
ec->read_iovec.iod_iovec_s = count;
|
||||||
ec->read_iovec.iod_proc_nr = mp->m_source;
|
ec->read_iovec.iod_proc_nr = mp->m_source;
|
||||||
ec->read_iovec.iod_grant = (cp_grant_id_t) mp->DL_GRANT;
|
ec->read_iovec.iod_grant = mp->m_net_netdrv_dl_readv_s.grant;
|
||||||
ec->read_iovec.iod_iovec_offset = 0;
|
ec->read_iovec.iod_iovec_offset = 0;
|
||||||
|
|
||||||
ec->tmp_iovec = ec->read_iovec;
|
ec->tmp_iovec = ec->read_iovec;
|
||||||
|
@ -1114,7 +1114,7 @@ int from_int;
|
||||||
ec = &ec_state;
|
ec = &ec_state;
|
||||||
|
|
||||||
ec->client= mp->m_source;
|
ec->client= mp->m_source;
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
|
|
||||||
if (isstored[tx_slot_nr]==1)
|
if (isstored[tx_slot_nr]==1)
|
||||||
{
|
{
|
||||||
|
@ -1126,7 +1126,7 @@ int from_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* convert the message to write_iovec */
|
/* convert the message to write_iovec */
|
||||||
r = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, 0,
|
r = sys_safecopyfrom(mp->m_source, mp->m_net_netdrv_dl_writev_s.grant, 0,
|
||||||
(vir_bytes)ec->write_iovec.iod_iovec,
|
(vir_bytes)ec->write_iovec.iod_iovec,
|
||||||
(count > IOVEC_NR ? IOVEC_NR : count) *
|
(count > IOVEC_NR ? IOVEC_NR : count) *
|
||||||
sizeof(iovec_s_t));
|
sizeof(iovec_s_t));
|
||||||
|
@ -1134,7 +1134,7 @@ int from_int;
|
||||||
panic("do_vwrite_s: sys_safecopyfrom failed: %d", r);
|
panic("do_vwrite_s: sys_safecopyfrom failed: %d", r);
|
||||||
ec->write_iovec.iod_iovec_s = count;
|
ec->write_iovec.iod_iovec_s = count;
|
||||||
ec->write_iovec.iod_proc_nr = mp->m_source;
|
ec->write_iovec.iod_proc_nr = mp->m_source;
|
||||||
ec->write_iovec.iod_grant = mp->DL_GRANT;
|
ec->write_iovec.iod_grant = mp->m_net_netdrv_dl_writev_s.grant;
|
||||||
ec->write_iovec.iod_iovec_offset = 0;
|
ec->write_iovec.iod_iovec_offset = 0;
|
||||||
|
|
||||||
ec->tmp_iovec = ec->write_iovec;
|
ec->tmp_iovec = ec->write_iovec;
|
||||||
|
|
|
@ -1165,7 +1165,7 @@ static void or_writev_s (message * mp, int from_int) {
|
||||||
|
|
||||||
orp = &or_state;
|
orp = &or_state;
|
||||||
|
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
|
|
||||||
orp->or_client = mp->m_source;
|
orp->or_client = mp->m_source;
|
||||||
hw = &(orp->hw);
|
hw = &(orp->hw);
|
||||||
|
@ -1210,7 +1210,8 @@ static void or_writev_s (message * mp, int from_int) {
|
||||||
if (i + n > count)
|
if (i + n > count)
|
||||||
n = count - i;
|
n = count - i;
|
||||||
|
|
||||||
cps = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, iov_offset,
|
cps = sys_safecopyfrom(mp->m_source,
|
||||||
|
mp->m_net_netdrv_dl_writev_s.grant, iov_offset,
|
||||||
(vir_bytes) orp->or_iovec_s,
|
(vir_bytes) orp->or_iovec_s,
|
||||||
n * sizeof(orp->or_iovec_s[0]));
|
n * sizeof(orp->or_iovec_s[0]));
|
||||||
if (cps != OK)
|
if (cps != OK)
|
||||||
|
@ -1563,7 +1564,7 @@ static void or_readv_s (message * mp, int from_int)
|
||||||
orp = &or_state;
|
orp = &or_state;
|
||||||
|
|
||||||
orp->or_client = mp->m_source;
|
orp->or_client = mp->m_source;
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
|
|
||||||
assert (orp->or_mode == OR_M_ENABLED);
|
assert (orp->or_mode == OR_M_ENABLED);
|
||||||
assert (orp->or_flags & OR_F_ENABLED);
|
assert (orp->or_flags & OR_F_ENABLED);
|
||||||
|
@ -1601,7 +1602,8 @@ static void or_readv_s (message * mp, int from_int)
|
||||||
if (i + n > count)
|
if (i + n > count)
|
||||||
n = count - i;
|
n = count - i;
|
||||||
|
|
||||||
cps = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, iov_offset,
|
cps = sys_safecopyfrom(mp->m_source,
|
||||||
|
mp->m_net_netdrv_dl_readv_s.grant, iov_offset,
|
||||||
(vir_bytes)orp->or_iovec_s,
|
(vir_bytes)orp->or_iovec_s,
|
||||||
n * sizeof(orp->or_iovec_s[0]));
|
n * sizeof(orp->or_iovec_s[0]));
|
||||||
if (cps != OK)
|
if (cps != OK)
|
||||||
|
|
|
@ -781,7 +781,7 @@ static void rl_readv_s(const message *mp, int from_int)
|
||||||
rep= &re_state;
|
rep= &re_state;
|
||||||
|
|
||||||
rep->re_client= mp->m_source;
|
rep->re_client= mp->m_source;
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
|
|
||||||
if (rep->re_clear_rx)
|
if (rep->re_clear_rx)
|
||||||
goto suspend; /* Buffer overflow */
|
goto suspend; /* Buffer overflow */
|
||||||
|
@ -871,7 +871,8 @@ static void rl_readv_s(const message *mp, int from_int)
|
||||||
if (i+n > count)
|
if (i+n > count)
|
||||||
n= count-i;
|
n= count-i;
|
||||||
|
|
||||||
cps = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, iov_offset,
|
cps = sys_safecopyfrom(mp->m_source,
|
||||||
|
mp->m_net_netdrv_dl_readv_s.grant, iov_offset,
|
||||||
(vir_bytes) rep->re_iovec_s,
|
(vir_bytes) rep->re_iovec_s,
|
||||||
n * sizeof(rep->re_iovec_s[0]));
|
n * sizeof(rep->re_iovec_s[0]));
|
||||||
if (cps != OK) {
|
if (cps != OK) {
|
||||||
|
@ -1003,7 +1004,7 @@ static void rl_writev_s(const message *mp, int from_int)
|
||||||
rep= &re_state;
|
rep= &re_state;
|
||||||
|
|
||||||
rep->re_client= mp->m_source;
|
rep->re_client= mp->m_source;
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
|
|
||||||
assert(rep->re_mode == REM_ENABLED);
|
assert(rep->re_mode == REM_ENABLED);
|
||||||
assert(rep->re_flags & REF_ENABLED);
|
assert(rep->re_flags & REF_ENABLED);
|
||||||
|
@ -1035,7 +1036,8 @@ static void rl_writev_s(const message *mp, int from_int)
|
||||||
n= IOVEC_NR;
|
n= IOVEC_NR;
|
||||||
if (i+n > count)
|
if (i+n > count)
|
||||||
n= count-i;
|
n= count-i;
|
||||||
cps = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, iov_offset,
|
cps = sys_safecopyfrom(mp->m_source,
|
||||||
|
mp->m_net_netdrv_dl_writev_s.grant, iov_offset,
|
||||||
(vir_bytes) rep->re_iovec_s,
|
(vir_bytes) rep->re_iovec_s,
|
||||||
n * sizeof(rep->re_iovec_s[0]));
|
n * sizeof(rep->re_iovec_s[0]));
|
||||||
if (cps != OK) {
|
if (cps != OK) {
|
||||||
|
|
|
@ -1168,7 +1168,7 @@ static void rl_readv_s(const message *mp, int from_int)
|
||||||
rep = &re_state;
|
rep = &re_state;
|
||||||
|
|
||||||
rep->re_client = mp->m_source;
|
rep->re_client = mp->m_source;
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_readv_s.count;
|
||||||
|
|
||||||
assert(rep->re_mode == REM_ENABLED);
|
assert(rep->re_mode == REM_ENABLED);
|
||||||
assert(rep->re_flags & REF_ENABLED);
|
assert(rep->re_flags & REF_ENABLED);
|
||||||
|
@ -1228,7 +1228,8 @@ readvs_loop:
|
||||||
n = IOVEC_NR;
|
n = IOVEC_NR;
|
||||||
if (i + n > count)
|
if (i + n > count)
|
||||||
n = count-i;
|
n = count-i;
|
||||||
cps = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, iov_offset,
|
cps = sys_safecopyfrom(mp->m_source,
|
||||||
|
mp->m_net_netdrv_dl_readv_s.grant, iov_offset,
|
||||||
(vir_bytes) rep->re_iovec_s,
|
(vir_bytes) rep->re_iovec_s,
|
||||||
n * sizeof(rep->re_iovec_s[0]));
|
n * sizeof(rep->re_iovec_s[0]));
|
||||||
if (cps != OK) {
|
if (cps != OK) {
|
||||||
|
@ -1307,7 +1308,7 @@ static void rl_writev_s(const message *mp, int from_int)
|
||||||
rep = &re_state;
|
rep = &re_state;
|
||||||
|
|
||||||
rep->re_client = mp->m_source;
|
rep->re_client = mp->m_source;
|
||||||
count = mp->DL_COUNT;
|
count = mp->m_net_netdrv_dl_writev_s.count;
|
||||||
assert(rep->setup);
|
assert(rep->setup);
|
||||||
|
|
||||||
assert(rep->re_mode == REM_ENABLED);
|
assert(rep->re_mode == REM_ENABLED);
|
||||||
|
@ -1364,7 +1365,8 @@ static void rl_writev_s(const message *mp, int from_int)
|
||||||
n = IOVEC_NR;
|
n = IOVEC_NR;
|
||||||
if (i + n > count)
|
if (i + n > count)
|
||||||
n = count - i;
|
n = count - i;
|
||||||
cps = sys_safecopyfrom(mp->m_source, mp->DL_GRANT, iov_offset,
|
cps = sys_safecopyfrom(mp->m_source,
|
||||||
|
mp->m_net_netdrv_dl_writev_s.grant, iov_offset,
|
||||||
(vir_bytes) rep->re_iovec_s,
|
(vir_bytes) rep->re_iovec_s,
|
||||||
n * sizeof(rep->re_iovec_s[0]));
|
n * sizeof(rep->re_iovec_s[0]));
|
||||||
if (cps != OK) {
|
if (cps != OK) {
|
||||||
|
|
|
@ -90,7 +90,8 @@ static void virtio_net_refill_rx_queue(void);
|
||||||
static void virtio_net_check_queues(void);
|
static void virtio_net_check_queues(void);
|
||||||
static void virtio_net_check_pending(void);
|
static void virtio_net_check_pending(void);
|
||||||
|
|
||||||
static void virtio_net_fetch_iovec(iovec_s_t *iov, message *m);
|
static void virtio_net_fetch_iovec(iovec_s_t *iov, message *m,
|
||||||
|
cp_grant_id_t grant, size_t count);
|
||||||
static int virtio_net_cpy_to_user(message *m);
|
static int virtio_net_cpy_to_user(message *m);
|
||||||
static int virtio_net_cpy_from_user(message *m);
|
static int virtio_net_cpy_from_user(message *m);
|
||||||
|
|
||||||
|
@ -318,11 +319,11 @@ virtio_net_check_pending(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
virtio_net_fetch_iovec(iovec_s_t *iov, message *m)
|
virtio_net_fetch_iovec(iovec_s_t *iov, message *m, cp_grant_id_t grant, size_t count)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
r = sys_safecopyfrom(m->m_source, m->DL_GRANT, 0, (vir_bytes)iov,
|
r = sys_safecopyfrom(m->m_source, grant, 0, (vir_bytes)iov,
|
||||||
m->DL_COUNT * sizeof(iov[0]));
|
count * sizeof(iov[0]));
|
||||||
|
|
||||||
if (r != OK)
|
if (r != OK)
|
||||||
panic("%s: iovec fail for %d (%d)", name, m->m_source, r);
|
panic("%s: iovec fail for %d (%d)", name, m->m_source, r);
|
||||||
|
@ -344,9 +345,10 @@ virtio_net_cpy_to_user(message *m)
|
||||||
p = STAILQ_FIRST(&recv_list);
|
p = STAILQ_FIRST(&recv_list);
|
||||||
STAILQ_REMOVE_HEAD(&recv_list, next);
|
STAILQ_REMOVE_HEAD(&recv_list, next);
|
||||||
|
|
||||||
virtio_net_fetch_iovec(iovec, m);
|
virtio_net_fetch_iovec(iovec, m, m->m_net_netdrv_dl_readv_s.grant,
|
||||||
|
m->m_net_netdrv_dl_readv_s.count);
|
||||||
|
|
||||||
for (i = 0; i < m->DL_COUNT && left > 0; i++) {
|
for (i = 0; i < m->m_net_netdrv_dl_readv_s.count && left > 0; i++) {
|
||||||
ivsz = iovec[i].iov_size;
|
ivsz = iovec[i].iov_size;
|
||||||
size = left > ivsz ? ivsz : left;
|
size = left > ivsz ? ivsz : left;
|
||||||
r = sys_safecopyto(m->m_source, iovec[i].iov_grant, 0,
|
r = sys_safecopyto(m->m_source, iovec[i].iov_grant, 0,
|
||||||
|
@ -429,11 +431,12 @@ virtio_net_cpy_from_user(message *m)
|
||||||
p = STAILQ_FIRST(&free_list);
|
p = STAILQ_FIRST(&free_list);
|
||||||
STAILQ_REMOVE_HEAD(&free_list, next);
|
STAILQ_REMOVE_HEAD(&free_list, next);
|
||||||
|
|
||||||
virtio_net_fetch_iovec(iovec, m);
|
virtio_net_fetch_iovec(iovec, m, m->m_net_netdrv_dl_writev_s.grant,
|
||||||
|
m->m_net_netdrv_dl_writev_s.count);
|
||||||
|
|
||||||
r = sys_easy_vsafecopy_from(m->m_source, iovec, m->DL_COUNT,
|
r = sys_easy_vsafecopy_from(m->m_source, iovec,
|
||||||
(vir_bytes)p->vdata, MAX_PACK_SIZE,
|
m->m_net_netdrv_dl_writev_s.count, (vir_bytes)p->vdata,
|
||||||
&bytes);
|
MAX_PACK_SIZE, &bytes);
|
||||||
|
|
||||||
if (r != OK)
|
if (r != OK)
|
||||||
panic("%s: copy from %d failed", name, m->m_source);
|
panic("%s: copy from %d failed", name, m->m_source);
|
||||||
|
|
|
@ -178,10 +178,6 @@
|
||||||
#define DL_STAT_REPLY (DL_RS_BASE + 1)
|
#define DL_STAT_REPLY (DL_RS_BASE + 1)
|
||||||
#define DL_TASK_REPLY (DL_RS_BASE + 2)
|
#define DL_TASK_REPLY (DL_RS_BASE + 2)
|
||||||
|
|
||||||
/* Field names for data link layer messages. */
|
|
||||||
#define DL_COUNT m2_i3
|
|
||||||
#define DL_GRANT m2_l2
|
|
||||||
|
|
||||||
/* Bits in 'flags' field of DL replies. */
|
/* Bits in 'flags' field of DL replies. */
|
||||||
# define DL_NOFLAGS 0x00
|
# define DL_NOFLAGS 0x00
|
||||||
# define DL_PACK_SEND 0x01
|
# define DL_PACK_SEND 0x01
|
||||||
|
|
|
@ -835,6 +835,22 @@ typedef struct {
|
||||||
} mess_net_netdrv_dl_getstat_s;
|
} mess_net_netdrv_dl_getstat_s;
|
||||||
_ASSERT_MSG_SIZE(mess_net_netdrv_dl_getstat_s);
|
_ASSERT_MSG_SIZE(mess_net_netdrv_dl_getstat_s);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
cp_grant_id_t grant;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
uint8_t padding[48];
|
||||||
|
} mess_net_netdrv_dl_readv_s;
|
||||||
|
_ASSERT_MSG_SIZE(mess_net_netdrv_dl_readv_s);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
cp_grant_id_t grant;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
uint8_t padding[48];
|
||||||
|
} mess_net_netdrv_dl_writev_s;
|
||||||
|
_ASSERT_MSG_SIZE(mess_net_netdrv_dl_writev_s);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int count;
|
int count;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
@ -1425,6 +1441,8 @@ typedef struct {
|
||||||
|
|
||||||
mess_net_netdrv_dl_conf m_net_netdrv_dl_conf;
|
mess_net_netdrv_dl_conf m_net_netdrv_dl_conf;
|
||||||
mess_net_netdrv_dl_getstat_s m_net_netdrv_dl_getstat_s;
|
mess_net_netdrv_dl_getstat_s m_net_netdrv_dl_getstat_s;
|
||||||
|
mess_net_netdrv_dl_readv_s m_net_netdrv_dl_readv_s;
|
||||||
|
mess_net_netdrv_dl_writev_s m_net_netdrv_dl_writev_s;
|
||||||
|
|
||||||
mess_netdrv_net_dl_conf m_netdrv_net_dl_conf;
|
mess_netdrv_net_dl_conf m_netdrv_net_dl_conf;
|
||||||
mess_netdrv_net_dl_task m_netdrv_net_dl_task;
|
mess_netdrv_net_dl_task m_netdrv_net_dl_task;
|
||||||
|
|
|
@ -555,8 +555,8 @@ eth_port_t *eth_port;
|
||||||
errno));
|
errno));
|
||||||
}
|
}
|
||||||
m.m_type= DL_WRITEV_S;
|
m.m_type= DL_WRITEV_S;
|
||||||
m.DL_COUNT= i;
|
m.m_net_netdrv_dl_writev_s.count= i;
|
||||||
m.DL_GRANT= eth_port->etp_osdep.etp_wr_vec_grant;
|
m.m_net_netdrv_dl_writev_s.grant= eth_port->etp_osdep.etp_wr_vec_grant;
|
||||||
|
|
||||||
assert(eth_port->etp_osdep.etp_state == OEPS_IDLE);
|
assert(eth_port->etp_osdep.etp_state == OEPS_IDLE);
|
||||||
r= asynsend(eth_port->etp_osdep.etp_task, &m);
|
r= asynsend(eth_port->etp_osdep.etp_task, &m);
|
||||||
|
@ -721,8 +721,8 @@ eth_port_t *eth_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
mess.m_type= DL_READV_S;
|
mess.m_type= DL_READV_S;
|
||||||
mess.DL_COUNT= i;
|
mess.m_net_netdrv_dl_readv_s.count= i;
|
||||||
mess.DL_GRANT= eth_port->etp_osdep.etp_rd_vec_grant;
|
mess.m_net_netdrv_dl_readv_s.grant= eth_port->etp_osdep.etp_rd_vec_grant;
|
||||||
|
|
||||||
assert(eth_port->etp_osdep.etp_state == OEPS_IDLE);
|
assert(eth_port->etp_osdep.etp_state == OEPS_IDLE);
|
||||||
|
|
||||||
|
|
|
@ -147,8 +147,8 @@ static void driver_setup_read(struct nic * nic)
|
||||||
nic->rx_iovec[0].iov_size = nic->rx_pbuf->len;
|
nic->rx_iovec[0].iov_size = nic->rx_pbuf->len;
|
||||||
|
|
||||||
m.m_type = DL_READV_S;
|
m.m_type = DL_READV_S;
|
||||||
m.DL_COUNT = 1;
|
m.m_net_netdrv_dl_readv_s.count = 1;
|
||||||
m.DL_GRANT = nic->rx_iogrant;
|
m.m_net_netdrv_dl_readv_s.grant = nic->rx_iogrant;
|
||||||
|
|
||||||
if (asynsend(nic->drv_ep, &m) != OK)
|
if (asynsend(nic->drv_ep, &m) != OK)
|
||||||
panic("asynsend to the driver failed!");
|
panic("asynsend to the driver failed!");
|
||||||
|
@ -209,8 +209,8 @@ int driver_tx(struct nic * nic)
|
||||||
panic("Failed to set grant");
|
panic("Failed to set grant");
|
||||||
|
|
||||||
m.m_type = DL_WRITEV_S;
|
m.m_type = DL_WRITEV_S;
|
||||||
m.DL_COUNT = 1;
|
m.m_net_netdrv_dl_writev_s.count = 1;
|
||||||
m.DL_GRANT = nic->tx_iogrant;
|
m.m_net_netdrv_dl_writev_s.grant = nic->tx_iogrant;
|
||||||
|
|
||||||
if (asynsend(nic->drv_ep, &m) != OK)
|
if (asynsend(nic->drv_ep, &m) != OK)
|
||||||
panic("asynsend to the driver failed!");
|
panic("asynsend to the driver failed!");
|
||||||
|
|
Loading…
Reference in a new issue