Added config file override for memory size and added flags to force
8bit or 16bit operation, and a flag to disable transmitter double buffering. See the updated "ed.relnotes" file for information about how to set the flags. This should be considered the first "production" release. It still needs a manual page, though.
This commit is contained in:
parent
7b0d50fdfe
commit
69a164c5e3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=172
@ -16,15 +16,19 @@
|
|||||||
/*
|
/*
|
||||||
* Modification history
|
* Modification history
|
||||||
*
|
*
|
||||||
* $Log: if_ed.c,v $
|
* $Log: if_ed.c,v $
|
||||||
* Revision 1.6 1993/07/20 01:39:24 jkh
|
* Revision 1.14 93/07/20 15:24:25 davidg
|
||||||
* Fixed to allow iosiz config parameter to override what was (for me,
|
* ommision for force 16bit case fixed from last patch
|
||||||
* incorrectly) probed. This allows you more flexibility in getting weird
|
*
|
||||||
* WD 80x3 clones to work.
|
* Revision 1.13 93/07/20 15:13:55 davidg
|
||||||
*
|
* Added config file override for memsize by using 'iosiz'. Also added
|
||||||
* Revision 1.5 1993/06/27 10:28:28 davidg
|
* config flags overrides to force 8/16bit mode and disable the use of
|
||||||
* fixed bugs in the probe routine uncovered by the previous fix.
|
* double xmit buffers.
|
||||||
*
|
*
|
||||||
|
* Revision 1.12 93/07/07 06:27:44 davidg
|
||||||
|
* moved call to bpfattach to after this drivers attach printf -
|
||||||
|
* improves readability of startup messages.
|
||||||
|
*
|
||||||
* Revision 1.11 93/06/27 03:07:01 davidg
|
* Revision 1.11 93/06/27 03:07:01 davidg
|
||||||
* fixed bugs in the 3Com part of the probe routine that were uncovered by
|
* fixed bugs in the 3Com part of the probe routine that were uncovered by
|
||||||
* the previous fix.
|
* the previous fix.
|
||||||
@ -305,13 +309,24 @@ ed_probe(isa_dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ED_DEBUG
|
#if ED_DEBUG
|
||||||
printf("type=%s width=%d memsize=%d id_msize=%d\n",sc->type_str,memwidth,memsize,isa_dev->id_msize);
|
printf("type=%s memwidth=%d memsize=%d id_msize=%d\n",
|
||||||
|
sc->type_str,memwidth,memsize,isa_dev->id_msize);
|
||||||
for (i=0; i<8; i++)
|
for (i=0; i<8; i++)
|
||||||
printf("%x -> %x\n", i, inb(sc->asic_addr + i));
|
printf("%x -> %x\n", i, inb(sc->asic_addr + i));
|
||||||
#endif
|
#endif
|
||||||
/* Allow id_msize to override */
|
/*
|
||||||
if (isa_dev->id_msize)
|
* Allow the user to override the autoconfiguration
|
||||||
|
*/
|
||||||
|
if (isa_dev->id_msize)
|
||||||
memsize = isa_dev->id_msize;
|
memsize = isa_dev->id_msize;
|
||||||
|
/*
|
||||||
|
* (note that if the user specifies both of the following flags
|
||||||
|
* that '8bit' mode intentionally has precedence)
|
||||||
|
*/
|
||||||
|
if (isa_dev->id_flags & ED_FLAGS_FORCE_16BIT_MODE)
|
||||||
|
memwidth = 16;
|
||||||
|
if (isa_dev->id_flags & ED_FLAGS_FORCE_8BIT_MODE)
|
||||||
|
memwidth = 8;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check 83C584 interrupt configuration register if this board has one
|
* Check 83C584 interrupt configuration register if this board has one
|
||||||
@ -344,7 +359,7 @@ ed_probe(isa_dev)
|
|||||||
/*
|
/*
|
||||||
* allocate one xmit buffer if < 16k, two buffers otherwise
|
* allocate one xmit buffer if < 16k, two buffers otherwise
|
||||||
*/
|
*/
|
||||||
if (memsize < 16384) {
|
if ((memsize < 16384) || (isa_dev->id_msize & ED_FLAGS_NO_DOUBLE_BUFFERING)) {
|
||||||
sc->smem_ring = sc->smem_start + (ED_PAGE_SIZE * ED_TXBUF_SIZE);
|
sc->smem_ring = sc->smem_start + (ED_PAGE_SIZE * ED_TXBUF_SIZE);
|
||||||
sc->txb_cnt = 1;
|
sc->txb_cnt = 1;
|
||||||
sc->rec_page_start = ED_TXBUF_SIZE;
|
sc->rec_page_start = ED_TXBUF_SIZE;
|
||||||
@ -634,7 +649,7 @@ ed_probe(isa_dev)
|
|||||||
#if 0
|
#if 0
|
||||||
printf("Starting write\n");
|
printf("Starting write\n");
|
||||||
for (i = 0; i < 8192; ++i)
|
for (i = 0; i < 8192; ++i)
|
||||||
bzerow(sc->smem_start, 8192);
|
bzero(sc->smem_start, 8192);
|
||||||
printf("Done.\n");
|
printf("Done.\n");
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
@ -710,10 +725,6 @@ ed_attach(isa_dev)
|
|||||||
*/
|
*/
|
||||||
if_attach(ifp);
|
if_attach(ifp);
|
||||||
|
|
||||||
#if NBPFILTER > 0
|
|
||||||
bpfattach(&sc->bpf, ifp, DLT_EN10MB, sizeof(struct ether_header));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Search down the ifa address list looking for the AF_LINK type entry
|
* Search down the ifa address list looking for the AF_LINK type entry
|
||||||
*/
|
*/
|
||||||
@ -744,6 +755,14 @@ ed_attach(isa_dev)
|
|||||||
ether_sprintf(sc->arpcom.ac_enaddr), sc->type_str,
|
ether_sprintf(sc->arpcom.ac_enaddr), sc->type_str,
|
||||||
sc->memwidth, ((sc->vendor == ED_VENDOR_3COM) &&
|
sc->memwidth, ((sc->vendor == ED_VENDOR_3COM) &&
|
||||||
(ifp->if_flags & IFF_LLC0)) ? "tranceiver disabled" : "");
|
(ifp->if_flags & IFF_LLC0)) ? "tranceiver disabled" : "");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If BPF is in the kernel, call the attach for it
|
||||||
|
*/
|
||||||
|
#if NBPFILTER > 0
|
||||||
|
bpfattach(&sc->bpf, ifp, DLT_EN10MB, sizeof(struct ether_header));
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
* National Semiconductor DS8390 NIC register definitions
|
* National Semiconductor DS8390 NIC register definitions
|
||||||
*
|
*
|
||||||
* $Log: if_edreg.h,v $
|
* $Log: if_edreg.h,v $
|
||||||
|
* Revision 1.3 93/07/20 15:25:25 davidg
|
||||||
|
* added config flags for forcing 8/16bit mode and disabling double
|
||||||
|
* xmit buffers.
|
||||||
|
*
|
||||||
* Revision 1.2 93/06/23 03:03:05 davidg
|
* Revision 1.2 93/06/23 03:03:05 davidg
|
||||||
* added some additional definitions for the 83C584 bus interface
|
* added some additional definitions for the 83C584 bus interface
|
||||||
* chip (SMC/WD boards)
|
* chip (SMC/WD boards)
|
||||||
@ -561,7 +565,19 @@ struct ed_ring {
|
|||||||
/*
|
/*
|
||||||
* this sets the default for enabling/disablng the tranceiver
|
* this sets the default for enabling/disablng the tranceiver
|
||||||
*/
|
*/
|
||||||
#define ED_FLAGS_DISABLE_TRANCEIVER 0x01
|
#define ED_FLAGS_DISABLE_TRANCEIVER 0x01
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This forces the board to be used in 8/16bit mode even if it
|
||||||
|
* autoconfigs differently
|
||||||
|
*/
|
||||||
|
#define ED_FLAGS_FORCE_8BIT_MODE 0x02
|
||||||
|
#define ED_FLAGS_FORCE_16BIT_MODE 0x04
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This disables the use of double transmit buffers.
|
||||||
|
*/
|
||||||
|
#define ED_FLAGS_NO_DOUBLE_BUFFERING 0x08
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definitions for Western digital/SMC WD80x3 series ASIC
|
* Definitions for Western digital/SMC WD80x3 series ASIC
|
||||||
|
@ -16,15 +16,19 @@
|
|||||||
/*
|
/*
|
||||||
* Modification history
|
* Modification history
|
||||||
*
|
*
|
||||||
* $Log: if_ed.c,v $
|
* $Log: if_ed.c,v $
|
||||||
* Revision 1.6 1993/07/20 01:39:24 jkh
|
* Revision 1.14 93/07/20 15:24:25 davidg
|
||||||
* Fixed to allow iosiz config parameter to override what was (for me,
|
* ommision for force 16bit case fixed from last patch
|
||||||
* incorrectly) probed. This allows you more flexibility in getting weird
|
*
|
||||||
* WD 80x3 clones to work.
|
* Revision 1.13 93/07/20 15:13:55 davidg
|
||||||
*
|
* Added config file override for memsize by using 'iosiz'. Also added
|
||||||
* Revision 1.5 1993/06/27 10:28:28 davidg
|
* config flags overrides to force 8/16bit mode and disable the use of
|
||||||
* fixed bugs in the probe routine uncovered by the previous fix.
|
* double xmit buffers.
|
||||||
*
|
*
|
||||||
|
* Revision 1.12 93/07/07 06:27:44 davidg
|
||||||
|
* moved call to bpfattach to after this drivers attach printf -
|
||||||
|
* improves readability of startup messages.
|
||||||
|
*
|
||||||
* Revision 1.11 93/06/27 03:07:01 davidg
|
* Revision 1.11 93/06/27 03:07:01 davidg
|
||||||
* fixed bugs in the 3Com part of the probe routine that were uncovered by
|
* fixed bugs in the 3Com part of the probe routine that were uncovered by
|
||||||
* the previous fix.
|
* the previous fix.
|
||||||
@ -305,13 +309,24 @@ ed_probe(isa_dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ED_DEBUG
|
#if ED_DEBUG
|
||||||
printf("type=%s width=%d memsize=%d id_msize=%d\n",sc->type_str,memwidth,memsize,isa_dev->id_msize);
|
printf("type=%s memwidth=%d memsize=%d id_msize=%d\n",
|
||||||
|
sc->type_str,memwidth,memsize,isa_dev->id_msize);
|
||||||
for (i=0; i<8; i++)
|
for (i=0; i<8; i++)
|
||||||
printf("%x -> %x\n", i, inb(sc->asic_addr + i));
|
printf("%x -> %x\n", i, inb(sc->asic_addr + i));
|
||||||
#endif
|
#endif
|
||||||
/* Allow id_msize to override */
|
/*
|
||||||
if (isa_dev->id_msize)
|
* Allow the user to override the autoconfiguration
|
||||||
|
*/
|
||||||
|
if (isa_dev->id_msize)
|
||||||
memsize = isa_dev->id_msize;
|
memsize = isa_dev->id_msize;
|
||||||
|
/*
|
||||||
|
* (note that if the user specifies both of the following flags
|
||||||
|
* that '8bit' mode intentionally has precedence)
|
||||||
|
*/
|
||||||
|
if (isa_dev->id_flags & ED_FLAGS_FORCE_16BIT_MODE)
|
||||||
|
memwidth = 16;
|
||||||
|
if (isa_dev->id_flags & ED_FLAGS_FORCE_8BIT_MODE)
|
||||||
|
memwidth = 8;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check 83C584 interrupt configuration register if this board has one
|
* Check 83C584 interrupt configuration register if this board has one
|
||||||
@ -344,7 +359,7 @@ ed_probe(isa_dev)
|
|||||||
/*
|
/*
|
||||||
* allocate one xmit buffer if < 16k, two buffers otherwise
|
* allocate one xmit buffer if < 16k, two buffers otherwise
|
||||||
*/
|
*/
|
||||||
if (memsize < 16384) {
|
if ((memsize < 16384) || (isa_dev->id_msize & ED_FLAGS_NO_DOUBLE_BUFFERING)) {
|
||||||
sc->smem_ring = sc->smem_start + (ED_PAGE_SIZE * ED_TXBUF_SIZE);
|
sc->smem_ring = sc->smem_start + (ED_PAGE_SIZE * ED_TXBUF_SIZE);
|
||||||
sc->txb_cnt = 1;
|
sc->txb_cnt = 1;
|
||||||
sc->rec_page_start = ED_TXBUF_SIZE;
|
sc->rec_page_start = ED_TXBUF_SIZE;
|
||||||
@ -634,7 +649,7 @@ ed_probe(isa_dev)
|
|||||||
#if 0
|
#if 0
|
||||||
printf("Starting write\n");
|
printf("Starting write\n");
|
||||||
for (i = 0; i < 8192; ++i)
|
for (i = 0; i < 8192; ++i)
|
||||||
bzerow(sc->smem_start, 8192);
|
bzero(sc->smem_start, 8192);
|
||||||
printf("Done.\n");
|
printf("Done.\n");
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
@ -710,10 +725,6 @@ ed_attach(isa_dev)
|
|||||||
*/
|
*/
|
||||||
if_attach(ifp);
|
if_attach(ifp);
|
||||||
|
|
||||||
#if NBPFILTER > 0
|
|
||||||
bpfattach(&sc->bpf, ifp, DLT_EN10MB, sizeof(struct ether_header));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Search down the ifa address list looking for the AF_LINK type entry
|
* Search down the ifa address list looking for the AF_LINK type entry
|
||||||
*/
|
*/
|
||||||
@ -744,6 +755,14 @@ ed_attach(isa_dev)
|
|||||||
ether_sprintf(sc->arpcom.ac_enaddr), sc->type_str,
|
ether_sprintf(sc->arpcom.ac_enaddr), sc->type_str,
|
||||||
sc->memwidth, ((sc->vendor == ED_VENDOR_3COM) &&
|
sc->memwidth, ((sc->vendor == ED_VENDOR_3COM) &&
|
||||||
(ifp->if_flags & IFF_LLC0)) ? "tranceiver disabled" : "");
|
(ifp->if_flags & IFF_LLC0)) ? "tranceiver disabled" : "");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If BPF is in the kernel, call the attach for it
|
||||||
|
*/
|
||||||
|
#if NBPFILTER > 0
|
||||||
|
bpfattach(&sc->bpf, ifp, DLT_EN10MB, sizeof(struct ether_header));
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
* National Semiconductor DS8390 NIC register definitions
|
* National Semiconductor DS8390 NIC register definitions
|
||||||
*
|
*
|
||||||
* $Log: if_edreg.h,v $
|
* $Log: if_edreg.h,v $
|
||||||
|
* Revision 1.3 93/07/20 15:25:25 davidg
|
||||||
|
* added config flags for forcing 8/16bit mode and disabling double
|
||||||
|
* xmit buffers.
|
||||||
|
*
|
||||||
* Revision 1.2 93/06/23 03:03:05 davidg
|
* Revision 1.2 93/06/23 03:03:05 davidg
|
||||||
* added some additional definitions for the 83C584 bus interface
|
* added some additional definitions for the 83C584 bus interface
|
||||||
* chip (SMC/WD boards)
|
* chip (SMC/WD boards)
|
||||||
@ -561,7 +565,19 @@ struct ed_ring {
|
|||||||
/*
|
/*
|
||||||
* this sets the default for enabling/disablng the tranceiver
|
* this sets the default for enabling/disablng the tranceiver
|
||||||
*/
|
*/
|
||||||
#define ED_FLAGS_DISABLE_TRANCEIVER 0x01
|
#define ED_FLAGS_DISABLE_TRANCEIVER 0x01
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This forces the board to be used in 8/16bit mode even if it
|
||||||
|
* autoconfigs differently
|
||||||
|
*/
|
||||||
|
#define ED_FLAGS_FORCE_8BIT_MODE 0x02
|
||||||
|
#define ED_FLAGS_FORCE_16BIT_MODE 0x04
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This disables the use of double transmit buffers.
|
||||||
|
*/
|
||||||
|
#define ED_FLAGS_NO_DOUBLE_BUFFERING 0x08
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definitions for Western digital/SMC WD80x3 series ASIC
|
* Definitions for Western digital/SMC WD80x3 series ASIC
|
||||||
|
Loading…
Reference in New Issue
Block a user