mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-01 12:19:28 +00:00
MFH
Sponsored by: The FreeBSD Foundation
This commit is contained in:
commit
79119a977d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/release-pkg/; revision=293760
@ -51,7 +51,7 @@ ec2ami: cw-ec2 ${CW_EC2_PORTINSTALL}
|
||||
@echo "--------------------------------------------------------------"
|
||||
@false
|
||||
.endif
|
||||
/usr/local/bin/bsdec2-image-upload ${PUBLISH} \
|
||||
/usr/local/bin/bsdec2-image-upload ${PUBLISH} --sriov \
|
||||
${.OBJDIR}/ec2.raw \
|
||||
"${TYPE} ${REVISION}-${BRANCH}-${TARGET}${AMINAMESUFFIX}" \
|
||||
"${TYPE} ${REVISION}-${BRANCH}-${TARGET}" \
|
||||
|
@ -67,7 +67,7 @@ cpu_flush_dcache(const void *ptr, size_t len)
|
||||
cl_size = get_dcache_line_size();
|
||||
|
||||
/* Calculate end address to clean */
|
||||
end = (vm_offset_t)(ptr + len);
|
||||
end = (vm_offset_t)ptr + (vm_offset_t)len;
|
||||
/* Align start address to cache line */
|
||||
addr = (vm_offset_t)ptr;
|
||||
addr = rounddown2(addr, cl_size);
|
||||
|
@ -886,7 +886,7 @@ __elfN(parse_modmetadata)(struct preloaded_file *fp, elf_file_t ef,
|
||||
error = __elfN(reloc_ptr)(fp, ef, v, &md, sizeof(md));
|
||||
if (error == EOPNOTSUPP) {
|
||||
md.md_cval += ef->off;
|
||||
md.md_data += ef->off;
|
||||
md.md_data = (void *)((uintptr_t)md.md_data + ef->off);
|
||||
} else if (error != 0)
|
||||
return (error);
|
||||
#endif
|
||||
|
@ -520,10 +520,8 @@ __elfN(obj_symaddr)(struct elf_file *ef, Elf_Size symidx)
|
||||
{
|
||||
Elf_Sym sym;
|
||||
Elf_Addr base;
|
||||
int symcnt;
|
||||
|
||||
symcnt = ef->e_shdr[ef->symtabindex].sh_size / sizeof(Elf_Sym);
|
||||
if (symidx >= symcnt)
|
||||
if (symidx >= ef->e_shdr[ef->symtabindex].sh_size / sizeof(Elf_Sym))
|
||||
return (0);
|
||||
COPYOUT(ef->e_shdr[ef->symtabindex].sh_addr + symidx * sizeof(Elf_Sym),
|
||||
&sym, sizeof(sym));
|
||||
|
@ -118,7 +118,6 @@ kern_bzero(vm_offset_t dest, size_t len)
|
||||
int
|
||||
kern_pread(int fd, vm_offset_t dest, size_t len, off_t off)
|
||||
{
|
||||
ssize_t nread;
|
||||
|
||||
if (lseek(fd, off, SEEK_SET) == -1) {
|
||||
#ifdef DEBUG
|
||||
@ -126,8 +125,7 @@ kern_pread(int fd, vm_offset_t dest, size_t len, off_t off)
|
||||
#endif
|
||||
return (-1);
|
||||
}
|
||||
nread = archsw.arch_readin(fd, dest, len);
|
||||
if (nread != len) {
|
||||
if ((size_t)archsw.arch_readin(fd, dest, len) != len) {
|
||||
#ifdef DEBUG
|
||||
printf("\nreadin failed\n");
|
||||
#endif
|
||||
@ -144,7 +142,6 @@ void *
|
||||
alloc_pread(int fd, off_t off, size_t len)
|
||||
{
|
||||
void *buf;
|
||||
ssize_t nread;
|
||||
|
||||
buf = malloc(len);
|
||||
if (buf == NULL) {
|
||||
@ -160,8 +157,7 @@ alloc_pread(int fd, off_t off, size_t len)
|
||||
free(buf);
|
||||
return (NULL);
|
||||
}
|
||||
nread = read(fd, buf, len);
|
||||
if (nread != len) {
|
||||
if ((size_t)read(fd, buf, len) != len) {
|
||||
#ifdef DEBUG
|
||||
printf("\nread failed\n");
|
||||
#endif
|
||||
|
@ -983,7 +983,7 @@ moduledir_rebuild(void)
|
||||
{
|
||||
struct moduledir *mdp, *mtmp;
|
||||
const char *path, *cp, *ep;
|
||||
int cplen;
|
||||
size_t cplen;
|
||||
|
||||
path = getenv("module_path");
|
||||
if (path == NULL)
|
||||
|
@ -102,7 +102,7 @@ static struct parttypes {
|
||||
const char *
|
||||
parttype2str(enum partition_type type)
|
||||
{
|
||||
int i;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < sizeof(ptypes) / sizeof(ptypes[0]); i++)
|
||||
if (ptypes[i].type == type)
|
||||
@ -203,7 +203,7 @@ gpt_checktbl(const struct gpt_hdr *hdr, u_char *tbl, size_t size,
|
||||
uint64_t lba_last)
|
||||
{
|
||||
struct gpt_ent *ent;
|
||||
int i, cnt;
|
||||
uint32_t i, cnt;
|
||||
|
||||
cnt = size / hdr->hdr_entsz;
|
||||
if (hdr->hdr_entries <= cnt) {
|
||||
@ -234,8 +234,8 @@ ptable_gptread(struct ptable *table, void *dev, diskread_t dread)
|
||||
struct gpt_ent *ent;
|
||||
u_char *buf, *tbl;
|
||||
uint64_t offset;
|
||||
int pri, sec, i;
|
||||
size_t size;
|
||||
int pri, sec;
|
||||
size_t size, i;
|
||||
|
||||
buf = malloc(table->sectorsize);
|
||||
if (buf == NULL)
|
||||
@ -358,7 +358,7 @@ mbr_parttype(uint8_t type)
|
||||
return (PART_UNKNOWN);
|
||||
}
|
||||
|
||||
struct ptable*
|
||||
static struct ptable*
|
||||
ptable_ebrread(struct ptable *table, void *dev, diskread_t dread)
|
||||
{
|
||||
struct dos_partition *dp;
|
||||
@ -436,7 +436,7 @@ bsd_parttype(uint8_t type)
|
||||
return (PART_UNKNOWN);
|
||||
}
|
||||
|
||||
struct ptable*
|
||||
static struct ptable*
|
||||
ptable_bsdread(struct ptable *table, void *dev, diskread_t dread)
|
||||
{
|
||||
struct disklabel *dl;
|
||||
|
@ -61,6 +61,8 @@ __FBSDID("$FreeBSD$");
|
||||
#define RELOC_TYPE_RELATIVE R_386_RELATIVE
|
||||
#endif
|
||||
|
||||
void self_reloc(Elf_Addr baseaddr, ElfW_Dyn *dynamic);
|
||||
|
||||
/*
|
||||
* A simple elf relocator.
|
||||
*/
|
||||
@ -118,6 +120,6 @@ self_reloc(Elf_Addr baseaddr, ElfW_Dyn *dynamic)
|
||||
/* XXX: do we need other relocations ? */
|
||||
break;
|
||||
}
|
||||
rel = (ElfW_Rel *) ((caddr_t) rel + relent);
|
||||
rel = (ElfW_Rel *)(void *)((caddr_t) rel + relent);
|
||||
}
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ fsread(ufs_ino_t inode, void *buf, size_t nbyte)
|
||||
#endif
|
||||
) &&
|
||||
fs.fs_bsize <= MAXBSIZE &&
|
||||
fs.fs_bsize >= sizeof(struct fs))
|
||||
fs.fs_bsize >= (int32_t)sizeof(struct fs))
|
||||
break;
|
||||
}
|
||||
if (sblock_try[n] == -1) {
|
||||
@ -231,10 +231,10 @@ fsread(ufs_ino_t inode, void *buf, size_t nbyte)
|
||||
sizeof(struct ufs2_dinode));
|
||||
#else
|
||||
if (fs.fs_magic == FS_UFS1_MAGIC)
|
||||
memcpy(&dp1, (struct ufs1_dinode *)blkbuf + n,
|
||||
memcpy(&dp1, (struct ufs1_dinode *)(void *)blkbuf + n,
|
||||
sizeof(struct ufs1_dinode));
|
||||
else
|
||||
memcpy(&dp2, (struct ufs2_dinode *)blkbuf + n,
|
||||
memcpy(&dp2, (struct ufs2_dinode *)(void *)blkbuf + n,
|
||||
sizeof(struct ufs2_dinode));
|
||||
#endif
|
||||
inomap = inode;
|
||||
@ -283,7 +283,7 @@ fsread(ufs_ino_t inode, void *buf, size_t nbyte)
|
||||
return -1;
|
||||
vbaddr = fsbtodb(&fs, addr2) + (off >> VBLKSHIFT) * DBPERVBLK;
|
||||
vboff = off & VBLKMASK;
|
||||
n = sblksize(&fs, size, lbn) - (off & ~VBLKMASK);
|
||||
n = sblksize(&fs, (off_t)size, lbn) - (off & ~VBLKMASK);
|
||||
if (n > VBLKSIZE)
|
||||
n = VBLKSIZE;
|
||||
if (blkmap != vbaddr) {
|
||||
|
@ -11,6 +11,7 @@ MK_SSP= no
|
||||
|
||||
PROG= boot1.sym
|
||||
INTERNALPROG=
|
||||
WARNS?= 6
|
||||
|
||||
# architecture-specific loader code
|
||||
SRCS= boot1.c self_reloc.c start.S
|
||||
|
@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
void panic(const char *fmt, ...) __dead2;
|
||||
void putchar(int c);
|
||||
EFI_STATUS efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE* Xsystab);
|
||||
|
||||
static int domount(EFI_DEVICE_PATH *device, EFI_BLOCK_IO *blkio, int quiet);
|
||||
static void load(const char *fname);
|
||||
@ -62,7 +63,7 @@ EFI_STATUS efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE* Xsystab)
|
||||
EFI_BOOT_SERVICES *BS;
|
||||
EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl = NULL;
|
||||
SIMPLE_TEXT_OUTPUT_INTERFACE *conout = NULL;
|
||||
char *path = _PATH_LOADER;
|
||||
const char *path = _PATH_LOADER;
|
||||
|
||||
systab = Xsystab;
|
||||
image = Ximage;
|
||||
@ -157,7 +158,6 @@ fsstat(ufs_ino_t inode)
|
||||
{
|
||||
#ifndef UFS2_ONLY
|
||||
static struct ufs1_dinode dp1;
|
||||
ufs1_daddr_t addr1;
|
||||
#endif
|
||||
#ifndef UFS1_ONLY
|
||||
static struct ufs2_dinode dp2;
|
||||
@ -166,11 +166,8 @@ fsstat(ufs_ino_t inode)
|
||||
static ufs_ino_t inomap;
|
||||
char *blkbuf;
|
||||
void *indbuf;
|
||||
size_t n, nb, size, off, vboff;
|
||||
ufs_lbn_t lbn;
|
||||
ufs2_daddr_t addr2, vbaddr;
|
||||
size_t n, size;
|
||||
static ufs2_daddr_t blkmap, indmap;
|
||||
u_int u;
|
||||
|
||||
blkbuf = dmadat->blkbuf;
|
||||
indbuf = dmadat->indbuf;
|
||||
@ -194,7 +191,7 @@ fsstat(ufs_ino_t inode)
|
||||
#endif
|
||||
) &&
|
||||
fs.fs_bsize <= MAXBSIZE &&
|
||||
fs.fs_bsize >= sizeof(struct fs))
|
||||
fs.fs_bsize >= (int32_t)sizeof(struct fs))
|
||||
break;
|
||||
}
|
||||
if (sblock_try[n] == -1) {
|
||||
@ -218,10 +215,10 @@ fsstat(ufs_ino_t inode)
|
||||
sizeof(struct ufs2_dinode));
|
||||
#else
|
||||
if (fs.fs_magic == FS_UFS1_MAGIC)
|
||||
memcpy(&dp1, (struct ufs1_dinode *)blkbuf + n,
|
||||
memcpy(&dp1, (struct ufs1_dinode *)(void *)blkbuf + n,
|
||||
sizeof(struct ufs1_dinode));
|
||||
else
|
||||
memcpy(&dp2, (struct ufs2_dinode *)blkbuf + n,
|
||||
memcpy(&dp2, (struct ufs2_dinode *)(void *)blkbuf + n,
|
||||
sizeof(struct ufs2_dinode));
|
||||
#endif
|
||||
inomap = inode;
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
LIB= efi_fdt
|
||||
INTERNALLIB=
|
||||
WARNS?= 6
|
||||
|
||||
SRCS= efi_fdt.c
|
||||
|
||||
|
@ -44,7 +44,6 @@ int
|
||||
fdt_platform_load_dtb(void)
|
||||
{
|
||||
struct fdt_header *hdr;
|
||||
int err;
|
||||
|
||||
hdr = efi_get_table(&fdtdtb);
|
||||
if (hdr != NULL) {
|
||||
@ -54,7 +53,7 @@ fdt_platform_load_dtb(void)
|
||||
}
|
||||
}
|
||||
|
||||
return (err);
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -127,7 +127,6 @@ typedef uint64_t UINTN;
|
||||
#define BAD_POINTER 0xFBFBFBFBFBFBFBFB
|
||||
#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
#pragma intrinsic (__break)
|
||||
#define BREAKPOINT() __break(0)
|
||||
|
||||
//
|
||||
@ -180,7 +179,6 @@ typedef uint64_t UINTN;
|
||||
// BugBug: Need to find out if this is portable accross compliers.
|
||||
//
|
||||
void __mfa (void);
|
||||
#pragma intrinsic (__mfa)
|
||||
#define MEMORY_FENCE() __mfa()
|
||||
|
||||
#ifdef EFI_NO_INTERFACE_DECL
|
||||
|
@ -26,9 +26,9 @@ Revision history:
|
||||
--*/
|
||||
|
||||
#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL \
|
||||
{ 0xE18541CD, 0xF755, 0x4f73, 0x92, 0x8D, 0x64, 0x3C, 0x8A, 0x79, 0xB2, 0x29 }
|
||||
{ 0xE18541CD, 0xF755, 0x4f73, {0x92, 0x8D, 0x64, 0x3C, 0x8A, 0x79, 0xB2, 0x29} }
|
||||
#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_31 \
|
||||
{ 0x1ACED566, 0x76ED, 0x4218, 0xBC, 0x81, 0x76, 0x7F, 0x1F, 0x97, 0x7A, 0x89 }
|
||||
{ 0x1ACED566, 0x76ED, 0x4218, {0xBC, 0x81, 0x76, 0x7F, 0x1F, 0x97, 0x7A, 0x89} }
|
||||
|
||||
#define EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE_REVISION 0x00010000
|
||||
#define EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE_REVISION_31 0x00010001
|
||||
|
@ -214,8 +214,8 @@ VOID
|
||||
// EFI platform varibles
|
||||
//
|
||||
|
||||
#define EFI_GLOBAL_VARIABLE \
|
||||
{ 0x8BE4DF61, 0x93CA, 0x11d2, 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C }
|
||||
#define EFI_GLOBAL_VARIABLE \
|
||||
{ 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
|
||||
|
||||
// Variable attributes
|
||||
#define EFI_VARIABLE_NON_VOLATILE 0x00000001
|
||||
@ -363,8 +363,8 @@ EFI_STATUS
|
||||
|
||||
|
||||
// Image handle
|
||||
#define LOADED_IMAGE_PROTOCOL \
|
||||
{ 0x5B1B31A1, 0x9562, 0x11d2, 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B }
|
||||
#define LOADED_IMAGE_PROTOCOL \
|
||||
{ 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
|
||||
|
||||
#define EFI_LOADED_IMAGE_INFORMATION_REVISION 0x1000
|
||||
typedef struct {
|
||||
@ -827,35 +827,35 @@ typedef struct {
|
||||
// EFI Configuration Table and GUID definitions
|
||||
//
|
||||
|
||||
#define MPS_TABLE_GUID \
|
||||
{ 0xeb9d2d2f, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
#define MPS_TABLE_GUID \
|
||||
{ 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define ACPI_TABLE_GUID \
|
||||
{ 0xeb9d2d30, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
#define ACPI_TABLE_GUID \
|
||||
{ 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define ACPI_20_TABLE_GUID \
|
||||
{ 0x8868e871, 0xe4f1, 0x11d3, 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 }
|
||||
#define ACPI_20_TABLE_GUID \
|
||||
{ 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
|
||||
|
||||
#define SMBIOS_TABLE_GUID \
|
||||
{ 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
#define SMBIOS_TABLE_GUID \
|
||||
{ 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define SAL_SYSTEM_TABLE_GUID \
|
||||
{ 0xeb9d2d32, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
#define SAL_SYSTEM_TABLE_GUID \
|
||||
{ 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define FDT_TABLE_GUID \
|
||||
{ 0xb1b621d5, 0xf19c, 0x41a5, 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 }
|
||||
#define FDT_TABLE_GUID \
|
||||
{ 0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0} }
|
||||
|
||||
#define DXE_SERVICES_TABLE_GUID \
|
||||
{ 0x5ad34ba, 0x6f02, 0x4214, 0x95, 0x2e, 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9 }
|
||||
#define DXE_SERVICES_TABLE_GUID \
|
||||
{ 0x5ad34ba, 0x6f02, 0x4214, {0x95, 0x2e, 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9} }
|
||||
|
||||
#define HOB_LIST_TABLE_GUID \
|
||||
{ 0x7739f24c, 0x93d7, 0x11d4, 0x9a, 0x3a, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
#define HOB_LIST_TABLE_GUID \
|
||||
{ 0x7739f24c, 0x93d7, 0x11d4, {0x9a, 0x3a, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define MEMORY_TYPE_INFORMATION_TABLE_GUID \
|
||||
{ 0x4c19049f, 0x4137, 0x4dd3, 0x9c, 0x10, 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa }
|
||||
{ 0x4c19049f, 0x4137, 0x4dd3, {0x9c, 0x10, 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa} }
|
||||
|
||||
#define DEBUG_IMAGE_INFO_TABLE_GUID \
|
||||
{ 0x49152e77, 0x1ada, 0x4764, 0xb7, 0xa2, 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b }
|
||||
{ 0x49152e77, 0x1ada, 0x4764, {0xb7, 0xa2, 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b} }
|
||||
|
||||
typedef struct _EFI_CONFIGURATION_TABLE {
|
||||
EFI_GUID VendorGuid;
|
||||
|
@ -32,7 +32,7 @@ Revision History
|
||||
//
|
||||
|
||||
#define SIMPLE_TEXT_OUTPUT_PROTOCOL \
|
||||
{ 0x387477c2, 0x69c7, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
{ 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
|
||||
|
||||
@ -239,8 +239,8 @@ typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
|
||||
// Text input protocol
|
||||
//
|
||||
|
||||
#define SIMPLE_TEXT_INPUT_PROTOCOL \
|
||||
{ 0x387477c1, 0x69c7, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
#define SIMPLE_TEXT_INPUT_PROTOCOL \
|
||||
{ 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
|
||||
|
||||
|
@ -35,7 +35,7 @@
|
||||
#define _EFI_CONS_CTL_H
|
||||
|
||||
#define EFI_CONSOLE_CONTROL_PROTOCOL_GUID \
|
||||
{ 0xf42f7782, 0x12e, 0x4c12, {0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21} }
|
||||
{ 0xf42f7782, 0x12e, 0x4c12, {0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21} }
|
||||
|
||||
typedef struct _EFI_CONSOLE_CONTROL_PROTOCOL EFI_CONSOLE_CONTROL_PROTOCOL;
|
||||
|
||||
|
@ -110,7 +110,7 @@ typedef struct _VENDOR_DEVICE_PATH {
|
||||
} VENDOR_DEVICE_PATH;
|
||||
|
||||
#define UNKNOWN_DEVICE_GUID \
|
||||
{ 0xcf31fac5, 0xc24e, 0x11d2, 0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b }
|
||||
{ 0xcf31fac5, 0xc24e, 0x11d2, {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} }
|
||||
|
||||
typedef struct _UKNOWN_DEVICE_VENDOR_DP {
|
||||
VENDOR_DEVICE_PATH DevicePath;
|
||||
@ -274,16 +274,16 @@ typedef struct _UART_DEVICE_PATH {
|
||||
/* Use VENDOR_DEVICE_PATH struct */
|
||||
|
||||
#define DEVICE_PATH_MESSAGING_PC_ANSI \
|
||||
{ 0xe0c14753, 0xf9be, 0x11d2, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
{ 0xe0c14753, 0xf9be, 0x11d2, {0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define DEVICE_PATH_MESSAGING_VT_100 \
|
||||
{ 0xdfa66065, 0xb419, 0x11d3, 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
{ 0xdfa66065, 0xb419, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define DEVICE_PATH_MESSAGING_VT_100_PLUS \
|
||||
{ 0x7baec70b, 0x57e0, 0x4c76, 0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43 }
|
||||
{ 0x7baec70b, 0x57e0, 0x4c76, {0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43} }
|
||||
|
||||
#define DEVICE_PATH_MESSAGING_VT_UTF8 \
|
||||
{ 0xad15a0d6, 0x8bec, 0x4acf, 0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88 }
|
||||
{ 0xad15a0d6, 0x8bec, 0x4acf, {0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88} }
|
||||
|
||||
|
||||
#define MEDIA_DEVICE_PATH 0x04
|
||||
|
@ -31,7 +31,7 @@ Revision History
|
||||
|
||||
#define EFIWARN(a) (a)
|
||||
#define EFI_ERROR(a) (((INTN) a) < 0)
|
||||
#define EFI_ERROR_CODE(a) (a & ~EFI_ERROR_MASK)
|
||||
#define EFI_ERROR_CODE(a) (unsigned long)(a & ~EFI_ERROR_MASK)
|
||||
|
||||
|
||||
#define EFI_SUCCESS 0
|
||||
|
@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
#define EFI_INTEL_FPSWA \
|
||||
{ 0xc41b6531, 0x97b9, 0x11d3, 0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
{ 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
INTERFACE_DECL(_FPSWA_INTERFACE);
|
||||
|
||||
|
@ -27,9 +27,8 @@ Revision History
|
||||
#ifndef _EFIGOP_H
|
||||
#define _EFIGOP_H
|
||||
|
||||
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
|
||||
{ 0x9042a9de, 0x23dc, 0x4a38, 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, \
|
||||
0x51, 0x6a }
|
||||
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
|
||||
{ 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a} }
|
||||
|
||||
INTERFACE_DECL(_EFI_GRAPHICS_OUTPUT);
|
||||
|
||||
|
@ -50,3 +50,4 @@ time_t efi_time(EFI_TIME *);
|
||||
|
||||
EFI_STATUS main(int argc, CHAR16 *argv[]);
|
||||
void exit(EFI_STATUS status);
|
||||
void delay(int usecs);
|
||||
|
@ -29,7 +29,7 @@ Revision History
|
||||
//
|
||||
|
||||
#define EFI_SIMPLE_NETWORK_PROTOCOL \
|
||||
{ 0xA19832B9, 0xAC25, 0x11D3, 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }
|
||||
{ 0xA19832B9, 0xAC25, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
||||
|
||||
|
||||
INTERFACE_DECL(_EFI_SIMPLE_NETWORK);
|
||||
|
@ -21,9 +21,7 @@
|
||||
/// Global ID for the PCI I/O Protocol
|
||||
///
|
||||
#define EFI_PCI_IO_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a } \
|
||||
}
|
||||
{ 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} }
|
||||
|
||||
typedef struct _EFI_PCI_IO_PROTOCOL EFI_PCI_IO_PROTOCOL;
|
||||
|
||||
|
@ -31,8 +31,8 @@ Revision History
|
||||
// Device Path protocol
|
||||
//
|
||||
|
||||
#define DEVICE_PATH_PROTOCOL \
|
||||
{ 0x9576e91, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
#define DEVICE_PATH_PROTOCOL \
|
||||
{ 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
|
||||
//
|
||||
@ -40,7 +40,7 @@ Revision History
|
||||
//
|
||||
|
||||
#define BLOCK_IO_PROTOCOL \
|
||||
{ 0x964e5b21, 0x6459, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
{ 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
#define EFI_BLOCK_IO_INTERFACE_REVISION 0x00010000
|
||||
|
||||
INTERFACE_DECL(_EFI_BLOCK_IO);
|
||||
@ -116,7 +116,7 @@ typedef struct _EFI_BLOCK_IO {
|
||||
//
|
||||
|
||||
#define DISK_IO_PROTOCOL \
|
||||
{ 0xce345171, 0xba0b, 0x11d2, 0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
{ 0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
#define EFI_DISK_IO_INTERFACE_REVISION 0x00010000
|
||||
|
||||
INTERFACE_DECL(_EFI_DISK_IO);
|
||||
@ -155,7 +155,7 @@ typedef struct _EFI_DISK_IO {
|
||||
//
|
||||
|
||||
#define SIMPLE_FILE_SYSTEM_PROTOCOL \
|
||||
{ 0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
{ 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
INTERFACE_DECL(_EFI_FILE_IO_INTERFACE);
|
||||
INTERFACE_DECL(_EFI_FILE_HANDLE);
|
||||
@ -290,8 +290,8 @@ typedef struct _EFI_FILE_HANDLE {
|
||||
// File information types
|
||||
//
|
||||
|
||||
#define EFI_FILE_INFO_ID \
|
||||
{ 0x9576e92, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
#define EFI_FILE_INFO_ID \
|
||||
{ 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
typedef struct {
|
||||
UINT64 Size;
|
||||
@ -314,8 +314,8 @@ typedef struct {
|
||||
|
||||
#define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
|
||||
|
||||
#define EFI_FILE_SYSTEM_INFO_ID \
|
||||
{ 0x9576e93, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
#define EFI_FILE_SYSTEM_INFO_ID \
|
||||
{ 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
typedef struct {
|
||||
UINT64 Size;
|
||||
@ -336,8 +336,8 @@ typedef struct {
|
||||
|
||||
#define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
|
||||
|
||||
#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \
|
||||
{ 0xDB47D7D3,0xFE81, 0x11d3, 0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }
|
||||
#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \
|
||||
{ 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
||||
|
||||
typedef struct {
|
||||
CHAR16 VolumeLabel[1];
|
||||
@ -351,7 +351,7 @@ typedef struct {
|
||||
|
||||
|
||||
#define LOAD_FILE_PROTOCOL \
|
||||
{ 0x56EC3091, 0x954C, 0x11d2, 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B }
|
||||
{ 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
|
||||
|
||||
INTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE);
|
||||
|
||||
@ -375,7 +375,7 @@ typedef struct _EFI_LOAD_FILE_INTERFACE {
|
||||
//
|
||||
|
||||
#define DEVICE_IO_PROTOCOL \
|
||||
{ 0xaf6ac311, 0x84c3, 0x11d2, 0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
{ 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
INTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE);
|
||||
|
||||
@ -485,7 +485,7 @@ typedef struct _EFI_DEVICE_IO_INTERFACE {
|
||||
//
|
||||
|
||||
#define UNICODE_COLLATION_PROTOCOL \
|
||||
{ 0x1d85cd7f, 0xf43d, 0x11d2, 0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
{ 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
#define UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff)
|
||||
|
||||
|
@ -32,7 +32,7 @@ Revision History
|
||||
//
|
||||
|
||||
#define EFI_PXE_BASE_CODE_PROTOCOL \
|
||||
{ 0x03c4e603, 0xac28, 0x11d3, 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
|
||||
{ 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
||||
|
||||
INTERFACE_DECL(_EFI_PXE_BASE_CODE);
|
||||
|
||||
@ -425,7 +425,7 @@ typedef struct _EFI_PXE_BASE_CODE {
|
||||
//
|
||||
|
||||
#define EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL \
|
||||
{ 0x245dca21, 0xfb7b, 0x11d3, 0x8f, 0x01, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
|
||||
{ 0x245dca21, 0xfb7b, 0x11d3, {0x8f, 0x01, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
||||
|
||||
//
|
||||
// Revision Number
|
||||
|
@ -30,7 +30,7 @@ Revision History
|
||||
//
|
||||
|
||||
#define SERIAL_IO_PROTOCOL \
|
||||
{ 0xBB25CF6F, 0xF1D4, 0x11D2, 0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD }
|
||||
{ 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD} }
|
||||
|
||||
INTERFACE_DECL(_SERIAL_IO_INTERFACE);
|
||||
|
||||
|
@ -22,9 +22,7 @@
|
||||
#define __UGA_DRAW_H__
|
||||
|
||||
#define EFI_UGA_DRAW_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x982c298b, 0xf4fa, 0x41cb, {0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39 } \
|
||||
}
|
||||
{ 0x982c298b, 0xf4fa, 0x41cb, {0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39} }
|
||||
|
||||
typedef struct _EFI_UGA_DRAW_PROTOCOL EFI_UGA_DRAW_PROTOCOL;
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
LIB= efi
|
||||
INTERNALLIB=
|
||||
WARNS?= 2
|
||||
|
||||
SRCS= delay.c efi_console.c efinet.c efipart.c errno.c handles.c \
|
||||
libefi.c time.c
|
||||
|
@ -47,6 +47,8 @@ static int esc;
|
||||
void get_pos(int *x, int *y);
|
||||
void curs_move(int *_x, int *_y, int x, int y);
|
||||
static void CL(int);
|
||||
void HO(void);
|
||||
void end_term(void);
|
||||
#endif
|
||||
|
||||
static void efi_cons_probe(struct console *);
|
||||
|
@ -67,7 +67,6 @@ efipart_init(void)
|
||||
EFI_HANDLE *hin, *hout, *aliases, handle;
|
||||
EFI_STATUS status;
|
||||
UINTN sz;
|
||||
CHAR16 *path;
|
||||
u_int n, nin, nout;
|
||||
int err;
|
||||
size_t devpathlen;
|
||||
|
@ -179,7 +179,7 @@ efi_main(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *system_table)
|
||||
argv = malloc((argc + 1) * sizeof(CHAR16*));
|
||||
argc = 0;
|
||||
if (addprog)
|
||||
argv[argc++] = L"loader.efi";
|
||||
argv[argc++] = (CHAR16 *)"loader.efi";
|
||||
argp = args;
|
||||
while (argp != NULL && *argp != 0) {
|
||||
argp = arg_skipsep(argp);
|
||||
|
@ -11,6 +11,7 @@ MK_SSP= no
|
||||
|
||||
PROG= loader.sym
|
||||
INTERNALPROG=
|
||||
WARNS?= 3
|
||||
|
||||
# architecture-specific loader code
|
||||
SRCS= autoload.c \
|
||||
|
@ -100,7 +100,6 @@ elf64_exec(struct preloaded_file *fp)
|
||||
ACPI_TABLE_RSDP *rsdp;
|
||||
char buf[24];
|
||||
int revision;
|
||||
EFI_STATUS status;
|
||||
|
||||
rsdp = efi_get_table(&acpi20_guid);
|
||||
if (rsdp == NULL) {
|
||||
|
@ -39,6 +39,8 @@ __FBSDID("$FreeBSD$");
|
||||
#include <efipciio.h>
|
||||
#include <machine/metadata.h>
|
||||
|
||||
#include "framebuffer.h"
|
||||
|
||||
static EFI_GUID gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
|
||||
static EFI_GUID pciio_guid = EFI_PCI_IO_PROTOCOL_GUID;
|
||||
static EFI_GUID uga_guid = EFI_UGA_DRAW_PROTOCOL_GUID;
|
||||
@ -270,7 +272,7 @@ efifb_from_uga(struct efi_fb *efifb, EFI_UGA_DRAW_PROTOCOL *uga)
|
||||
char *ev, *p;
|
||||
EFI_STATUS status;
|
||||
ssize_t offset;
|
||||
uint64_t fbaddr, fbsize;
|
||||
uint64_t fbaddr;
|
||||
uint32_t horiz, vert, stride;
|
||||
uint32_t np, depth, refresh;
|
||||
|
||||
|
@ -44,8 +44,9 @@ __FBSDID("$FreeBSD$");
|
||||
#include "loader_efi.h"
|
||||
|
||||
extern vm_offset_t md_load(char *, vm_offset_t *);
|
||||
extern int bi_load(char *, vm_offset_t *, vm_offset_t *);
|
||||
|
||||
int
|
||||
static int
|
||||
__elfN(arm_load)(char *filename, u_int64_t dest,
|
||||
struct preloaded_file **result)
|
||||
{
|
||||
@ -58,7 +59,7 @@ __elfN(arm_load)(char *filename, u_int64_t dest,
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
__elfN(arm_exec)(struct preloaded_file *fp)
|
||||
{
|
||||
struct file_metadata *fmp;
|
||||
@ -66,7 +67,6 @@ __elfN(arm_exec)(struct preloaded_file *fp)
|
||||
Elf_Ehdr *e;
|
||||
int error;
|
||||
void (*entry)(void *);
|
||||
EFI_STATUS status;
|
||||
|
||||
if ((fmp = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL)
|
||||
return (EFTYPE);
|
||||
|
@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "platform/acfreebsd.h"
|
||||
#include "acconfig.h"
|
||||
#define ACPI_SYSTEM_XFACE
|
||||
#define ACPI_USE_SYSTEM_INTTYPES
|
||||
#include "actypes.h"
|
||||
#include "actbl.h"
|
||||
|
||||
@ -74,8 +75,6 @@ elf64_exec(struct preloaded_file *fp)
|
||||
size_t clean_size;
|
||||
struct file_metadata *md;
|
||||
ACPI_TABLE_RSDP *rsdp;
|
||||
EFI_STATUS status;
|
||||
EFI_PHYSICAL_ADDRESS addr;
|
||||
Elf_Ehdr *ehdr;
|
||||
char buf[24];
|
||||
int err, revision;
|
||||
@ -119,8 +118,8 @@ elf64_exec(struct preloaded_file *fp)
|
||||
return (err);
|
||||
|
||||
/* Clean D-cache under kernel area and invalidate whole I-cache */
|
||||
clean_addr = efi_translate(fp->f_addr);
|
||||
clean_size = efi_translate(kernendp) - clean_addr;
|
||||
clean_addr = (vm_offset_t)efi_translate(fp->f_addr);
|
||||
clean_size = (vm_offset_t)efi_translate(kernendp) - clean_addr;
|
||||
|
||||
cpu_flush_dcache((void *)clean_addr, clean_size);
|
||||
cpu_inval_icache(NULL, 0);
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "loader_efi.h"
|
||||
|
||||
int
|
||||
efi_autoload(void)
|
||||
{
|
||||
|
@ -55,6 +55,8 @@ __FBSDID("$FreeBSD$");
|
||||
#include <fdt_platform.h>
|
||||
#endif
|
||||
|
||||
int bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp);
|
||||
|
||||
extern EFI_SYSTEM_TABLE *ST;
|
||||
|
||||
static const char howto_switches[] = "aCdrgDmphsv";
|
||||
@ -122,7 +124,7 @@ bi_copyenv(vm_offset_t start)
|
||||
/* Traverse the environment. */
|
||||
for (ep = environ; ep != NULL; ep = ep->ev_next) {
|
||||
len = strlen(ep->ev_name);
|
||||
if (archsw.arch_copyin(ep->ev_name, addr, len) != len)
|
||||
if ((size_t)archsw.arch_copyin(ep->ev_name, addr, len) != len)
|
||||
break;
|
||||
addr += len;
|
||||
if (archsw.arch_copyin("=", addr, 1) != 1)
|
||||
@ -130,7 +132,7 @@ bi_copyenv(vm_offset_t start)
|
||||
addr++;
|
||||
if (ep->ev_value != NULL) {
|
||||
len = strlen(ep->ev_value);
|
||||
if (archsw.arch_copyin(ep->ev_value, addr, len) != len)
|
||||
if ((size_t)archsw.arch_copyin(ep->ev_value, addr, len) != len)
|
||||
break;
|
||||
addr += len;
|
||||
}
|
||||
@ -351,7 +353,7 @@ bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp)
|
||||
#endif
|
||||
#if defined(__arm__)
|
||||
vm_offset_t vaddr;
|
||||
int i;
|
||||
size_t i;
|
||||
/*
|
||||
* These metadata addreses must be converted for kernel after
|
||||
* relocation.
|
||||
|
@ -37,6 +37,8 @@ __FBSDID("$FreeBSD$");
|
||||
#include <efi.h>
|
||||
#include <efilib.h>
|
||||
|
||||
#include "loader_efi.h"
|
||||
|
||||
#ifndef EFI_STAGING_SIZE
|
||||
#define EFI_STAGING_SIZE 48
|
||||
#endif
|
||||
|
@ -31,11 +31,13 @@ __FBSDID("$FreeBSD$");
|
||||
#include <stand.h>
|
||||
#include <string.h>
|
||||
#include <sys/disklabel.h>
|
||||
#include "bootstrap.h"
|
||||
#include <bootstrap.h>
|
||||
|
||||
#include <efi.h>
|
||||
#include <efilib.h>
|
||||
|
||||
#include "loader_efi.h"
|
||||
|
||||
static int efi_parsedev(struct devdesc **, const char *, const char **);
|
||||
|
||||
/*
|
||||
|
@ -31,6 +31,8 @@
|
||||
#ifndef _LOADER_EFI_COPY_H_
|
||||
#define _LOADER_EFI_COPY_H_
|
||||
|
||||
#include <stand.h>
|
||||
|
||||
int efi_autoload(void);
|
||||
|
||||
int efi_getdev(void **vdev, const char *devspec, const char **path);
|
||||
|
@ -68,6 +68,7 @@ main(int argc, CHAR16 *argv[])
|
||||
EFI_LOADED_IMAGE *img;
|
||||
EFI_GUID *guid;
|
||||
int i, j, vargood;
|
||||
UINTN k;
|
||||
|
||||
/*
|
||||
* XXX Chicken-and-egg problem; we want to have console output
|
||||
@ -155,10 +156,10 @@ main(int argc, CHAR16 *argv[])
|
||||
archsw.arch_copyout = efi_copyout;
|
||||
archsw.arch_readin = efi_readin;
|
||||
|
||||
for (i = 0; i < ST->NumberOfTableEntries; i++) {
|
||||
guid = &ST->ConfigurationTable[i].VendorGuid;
|
||||
for (k = 0; k < ST->NumberOfTableEntries; k++) {
|
||||
guid = &ST->ConfigurationTable[k].VendorGuid;
|
||||
if (!memcmp(guid, &smbios, sizeof(EFI_GUID))) {
|
||||
smbios_detect(ST->ConfigurationTable[i].VendorTable);
|
||||
smbios_detect(ST->ConfigurationTable[k].VendorTable);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -242,8 +243,9 @@ command_memmap(int argc, char *argv[])
|
||||
|
||||
for (i = 0, p = map; i < ndesc;
|
||||
i++, p = NextMemoryDescriptor(p, dsz)) {
|
||||
printf("%23s %012lx %012lx %08lx ", types[p->Type],
|
||||
p->PhysicalStart, p->VirtualStart, p->NumberOfPages);
|
||||
printf("%23s %012jx %012jx %08jx ", types[p->Type],
|
||||
(uintmax_t)p->PhysicalStart, (uintmax_t)p->VirtualStart,
|
||||
(uintmax_t)p->NumberOfPages);
|
||||
if (p->Attribute & EFI_MEMORY_UC)
|
||||
printf("UC ");
|
||||
if (p->Attribute & EFI_MEMORY_WC)
|
||||
@ -284,9 +286,10 @@ guid_to_string(EFI_GUID *guid)
|
||||
static int
|
||||
command_configuration(int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
UINTN i;
|
||||
|
||||
printf("NumberOfTableEntries=%ld\n", ST->NumberOfTableEntries);
|
||||
printf("NumberOfTableEntries=%lu\n",
|
||||
(unsigned long)ST->NumberOfTableEntries);
|
||||
for (i = 0; i < ST->NumberOfTableEntries; i++) {
|
||||
EFI_GUID *guid;
|
||||
|
||||
@ -382,9 +385,8 @@ command_nvram(int argc, char *argv[])
|
||||
CHAR16 *data;
|
||||
EFI_STATUS status;
|
||||
EFI_GUID varguid = { 0,0,0,{0,0,0,0,0,0,0,0} };
|
||||
UINTN varsz, datasz;
|
||||
UINTN varsz, datasz, i;
|
||||
SIMPLE_TEXT_OUTPUT_INTERFACE *conout;
|
||||
int i;
|
||||
|
||||
conout = ST->ConOut;
|
||||
|
||||
|
@ -332,7 +332,7 @@ static caddr_t
|
||||
smbios_find_struct(int type)
|
||||
{
|
||||
caddr_t dmi;
|
||||
int i;
|
||||
size_t i;
|
||||
|
||||
if (smbios.addr == NULL)
|
||||
return (NULL);
|
||||
@ -402,7 +402,7 @@ smbios_detect(const caddr_t addr)
|
||||
{
|
||||
char buf[16];
|
||||
caddr_t dmi;
|
||||
int i;
|
||||
size_t i;
|
||||
|
||||
smbios_probe(addr);
|
||||
if (smbios.addr == NULL)
|
||||
|
@ -2586,6 +2586,25 @@ device pps
|
||||
device lpbb
|
||||
device pcfclock
|
||||
|
||||
#
|
||||
# Etherswitch framework and drivers
|
||||
#
|
||||
# etherswitch The etherswitch(4) framework
|
||||
# miiproxy Proxy device for miibus(4) functionality
|
||||
#
|
||||
# Switch hardware support:
|
||||
# arswitch Atheros switches
|
||||
# ip17x IC+ 17x family switches
|
||||
# rtl8366r Realtek RTL8366 switches
|
||||
# ukswitch Multi-PHY switches
|
||||
#
|
||||
device etherswitch
|
||||
device miiproxy
|
||||
device arswitch
|
||||
device ip17x
|
||||
device rtl8366rb
|
||||
device ukswitch
|
||||
|
||||
# Kernel BOOTP support
|
||||
|
||||
options BOOTP # Use BOOTP to obtain IP address/hostname
|
||||
|
@ -919,6 +919,7 @@ hv_nv_on_receive(netvsc_dev *net_dev, struct hv_device *device,
|
||||
*/
|
||||
hv_nv_on_receive_completion(device, vm_xfer_page_pkt->d.transaction_id,
|
||||
status);
|
||||
hv_rf_receive_rollup(net_dev);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -44,6 +44,12 @@
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/sx.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp_lro.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <dev/hyperv/include/hyperv.h>
|
||||
|
||||
MALLOC_DECLARE(M_NETVSC);
|
||||
@ -983,6 +989,7 @@ typedef struct {
|
||||
*/
|
||||
typedef struct hn_softc {
|
||||
struct ifnet *hn_ifp;
|
||||
struct ifmedia hn_media;
|
||||
device_t hn_dev;
|
||||
uint8_t hn_unit;
|
||||
int hn_carrier;
|
||||
@ -993,6 +1000,18 @@ typedef struct hn_softc {
|
||||
int temp_unusable;
|
||||
struct hv_device *hn_dev_obj;
|
||||
netvsc_dev *net_dev;
|
||||
|
||||
struct lro_ctrl hn_lro;
|
||||
int hn_lro_hiwat;
|
||||
|
||||
/* Trust tcp segments verification on host side */
|
||||
int hn_trust_hosttcp;
|
||||
|
||||
u_long hn_csum_ip;
|
||||
u_long hn_csum_tcp;
|
||||
u_long hn_csum_trusted;
|
||||
u_long hn_lro_tried;
|
||||
u_long hn_small_pkts;
|
||||
} hn_softc_t;
|
||||
|
||||
|
||||
|
@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/queue.h>
|
||||
#include <sys/lock.h>
|
||||
#include <sys/sx.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_arp.h>
|
||||
@ -138,13 +139,14 @@ __FBSDID("$FreeBSD$");
|
||||
CSUM_IP_ISCSI|CSUM_IP6_UDP|CSUM_IP6_TCP|CSUM_IP6_SCTP| \
|
||||
CSUM_IP6_TSO|CSUM_IP6_ISCSI)
|
||||
|
||||
/*
|
||||
* Data types
|
||||
*/
|
||||
|
||||
struct hv_netvsc_driver_context {
|
||||
uint32_t drv_inited;
|
||||
};
|
||||
/* XXX move to netinet/tcp_lro.h */
|
||||
#define HN_LRO_HIWAT_MAX 65535
|
||||
#define HN_LRO_HIWAT_DEF HN_LRO_HIWAT_MAX
|
||||
/* YYY 2*MTU is a bit rough, but should be good enough. */
|
||||
#define HN_LRO_HIWAT_MTULIM(ifp) (2 * (ifp)->if_mtu)
|
||||
#define HN_LRO_HIWAT_ISVALID(sc, hiwat) \
|
||||
((hiwat) >= HN_LRO_HIWAT_MTULIM((sc)->hn_ifp) || \
|
||||
(hiwat) <= HN_LRO_HIWAT_MAX)
|
||||
|
||||
/*
|
||||
* Be aware that this sleepable mutex will exhibit WITNESS errors when
|
||||
@ -168,9 +170,9 @@ struct hv_netvsc_driver_context {
|
||||
|
||||
int hv_promisc_mode = 0; /* normal mode by default */
|
||||
|
||||
/* The one and only one */
|
||||
static struct hv_netvsc_driver_context g_netvsc_drv;
|
||||
|
||||
/* Trust tcp segements verification on host side. */
|
||||
static int hn_trust_hosttcp = 0;
|
||||
TUNABLE_INT("dev.hn.trust_hosttcp", &hn_trust_hosttcp);
|
||||
|
||||
/*
|
||||
* Forward declarations
|
||||
@ -181,6 +183,21 @@ static void hn_ifinit(void *xsc);
|
||||
static int hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data);
|
||||
static int hn_start_locked(struct ifnet *ifp);
|
||||
static void hn_start(struct ifnet *ifp);
|
||||
static int hn_ifmedia_upd(struct ifnet *ifp);
|
||||
static void hn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr);
|
||||
#ifdef HN_LRO_HIWAT
|
||||
static int hn_lro_hiwat_sysctl(SYSCTL_HANDLER_ARGS);
|
||||
#endif
|
||||
static int hn_check_iplen(const struct mbuf *, int);
|
||||
|
||||
static __inline void
|
||||
hn_set_lro_hiwat(struct hn_softc *sc, int hiwat)
|
||||
{
|
||||
sc->hn_lro_hiwat = hiwat;
|
||||
#ifdef HN_LRO_HIWAT
|
||||
sc->hn_lro.lro_hiwat = sc->hn_lro_hiwat;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* NetVsc get message transport protocol type
|
||||
@ -238,35 +255,27 @@ static uint32_t get_transport_proto_type(struct mbuf *m_head)
|
||||
return (ret_val);
|
||||
}
|
||||
|
||||
/*
|
||||
* NetVsc driver initialization
|
||||
* Note: Filter init is no longer required
|
||||
*/
|
||||
static int
|
||||
netvsc_drv_init(void)
|
||||
hn_ifmedia_upd(struct ifnet *ifp __unused)
|
||||
{
|
||||
return (0);
|
||||
|
||||
return EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/*
|
||||
* NetVsc global initialization entry point
|
||||
*/
|
||||
static void
|
||||
netvsc_init(void)
|
||||
hn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
|
||||
{
|
||||
if (bootverbose)
|
||||
printf("Netvsc initializing... ");
|
||||
struct hn_softc *sc = ifp->if_softc;
|
||||
|
||||
/*
|
||||
* XXXKYS: cleanup initialization
|
||||
*/
|
||||
if (!cold && !g_netvsc_drv.drv_inited) {
|
||||
g_netvsc_drv.drv_inited = 1;
|
||||
netvsc_drv_init();
|
||||
if (bootverbose)
|
||||
printf("done!\n");
|
||||
} else if (bootverbose)
|
||||
printf("Already initialized!\n");
|
||||
ifmr->ifm_status = IFM_AVALID;
|
||||
ifmr->ifm_active = IFM_ETHER;
|
||||
|
||||
if (!sc->hn_carrier) {
|
||||
ifmr->ifm_active |= IFM_NONE;
|
||||
return;
|
||||
}
|
||||
ifmr->ifm_status |= IFM_ACTIVE;
|
||||
ifmr->ifm_active |= IFM_10G_T | IFM_FDX;
|
||||
}
|
||||
|
||||
/* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */
|
||||
@ -310,10 +319,10 @@ netvsc_attach(device_t dev)
|
||||
hn_softc_t *sc;
|
||||
int unit = device_get_unit(dev);
|
||||
struct ifnet *ifp;
|
||||
struct sysctl_oid_list *child;
|
||||
struct sysctl_ctx_list *ctx;
|
||||
int ret;
|
||||
|
||||
netvsc_init();
|
||||
|
||||
sc = device_get_softc(dev);
|
||||
if (sc == NULL) {
|
||||
return (ENOMEM);
|
||||
@ -322,6 +331,8 @@ netvsc_attach(device_t dev)
|
||||
bzero(sc, sizeof(hn_softc_t));
|
||||
sc->hn_unit = unit;
|
||||
sc->hn_dev = dev;
|
||||
sc->hn_lro_hiwat = HN_LRO_HIWAT_DEF;
|
||||
sc->hn_trust_hosttcp = hn_trust_hosttcp;
|
||||
|
||||
NV_LOCK_INIT(sc, "NetVSCLock");
|
||||
|
||||
@ -344,14 +355,22 @@ netvsc_attach(device_t dev)
|
||||
ifp->if_snd.ifq_drv_maxlen = 511;
|
||||
IFQ_SET_READY(&ifp->if_snd);
|
||||
|
||||
ifmedia_init(&sc->hn_media, 0, hn_ifmedia_upd, hn_ifmedia_sts);
|
||||
ifmedia_add(&sc->hn_media, IFM_ETHER | IFM_AUTO, 0, NULL);
|
||||
ifmedia_set(&sc->hn_media, IFM_ETHER | IFM_AUTO);
|
||||
/* XXX ifmedia_set really should do this for us */
|
||||
sc->hn_media.ifm_media = sc->hn_media.ifm_cur->ifm_media;
|
||||
|
||||
/*
|
||||
* Tell upper layers that we support full VLAN capability.
|
||||
*/
|
||||
ifp->if_hdrlen = sizeof(struct ether_vlan_header);
|
||||
ifp->if_capabilities |=
|
||||
IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_TSO;
|
||||
IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_TSO |
|
||||
IFCAP_LRO;
|
||||
ifp->if_capenable |=
|
||||
IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_TSO;
|
||||
IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_TSO |
|
||||
IFCAP_LRO;
|
||||
/*
|
||||
* Only enable UDP checksum offloading when it is on 2012R2 or
|
||||
* later. UDP checksum offloading doesn't work on earlier
|
||||
@ -372,8 +391,61 @@ netvsc_attach(device_t dev)
|
||||
sc->hn_carrier = 1;
|
||||
}
|
||||
|
||||
tcp_lro_init(&sc->hn_lro);
|
||||
/* Driver private LRO settings */
|
||||
sc->hn_lro.ifp = ifp;
|
||||
#ifdef HN_LRO_HIWAT
|
||||
sc->hn_lro.lro_hiwat = sc->hn_lro_hiwat;
|
||||
#endif
|
||||
|
||||
ether_ifattach(ifp, device_info.mac_addr);
|
||||
|
||||
ctx = device_get_sysctl_ctx(dev);
|
||||
child = SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
|
||||
|
||||
SYSCTL_ADD_INT(ctx, child, OID_AUTO, "lro_queued",
|
||||
CTLFLAG_RW, &sc->hn_lro.lro_queued, 0, "LRO queued");
|
||||
SYSCTL_ADD_INT(ctx, child, OID_AUTO, "lro_flushed",
|
||||
CTLFLAG_RW, &sc->hn_lro.lro_flushed, 0, "LRO flushed");
|
||||
SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "lro_tried",
|
||||
CTLFLAG_RW, &sc->hn_lro_tried, "# of LRO tries");
|
||||
#ifdef HN_LRO_HIWAT
|
||||
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "lro_hiwat",
|
||||
CTLTYPE_INT | CTLFLAG_RW, sc, 0, hn_lro_hiwat_sysctl,
|
||||
"I", "LRO high watermark");
|
||||
#endif
|
||||
SYSCTL_ADD_INT(ctx, child, OID_AUTO, "trust_hosttcp",
|
||||
CTLFLAG_RW, &sc->hn_trust_hosttcp, 0,
|
||||
"Trust tcp segement verification on host side, "
|
||||
"when csum info is missing");
|
||||
SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "csum_ip",
|
||||
CTLFLAG_RW, &sc->hn_csum_ip, "RXCSUM IP");
|
||||
SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "csum_tcp",
|
||||
CTLFLAG_RW, &sc->hn_csum_tcp, "RXCSUM TCP");
|
||||
SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "csum_trusted",
|
||||
CTLFLAG_RW, &sc->hn_csum_trusted,
|
||||
"# of TCP segements that we trust host's csum verification");
|
||||
SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "small_pkts",
|
||||
CTLFLAG_RW, &sc->hn_small_pkts, "# of small packets received");
|
||||
|
||||
if (unit == 0) {
|
||||
struct sysctl_ctx_list *dc_ctx;
|
||||
struct sysctl_oid_list *dc_child;
|
||||
devclass_t dc;
|
||||
|
||||
/*
|
||||
* Add sysctl nodes for devclass
|
||||
*/
|
||||
dc = device_get_devclass(dev);
|
||||
dc_ctx = devclass_get_sysctl_ctx(dc);
|
||||
dc_child = SYSCTL_CHILDREN(devclass_get_sysctl_tree(dc));
|
||||
|
||||
SYSCTL_ADD_INT(dc_ctx, dc_child, OID_AUTO, "trust_hosttcp",
|
||||
CTLFLAG_RD, &hn_trust_hosttcp, 0,
|
||||
"Trust tcp segement verification on host side, "
|
||||
"when csum info is missing (global setting)");
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -383,6 +455,7 @@ netvsc_attach(device_t dev)
|
||||
static int
|
||||
netvsc_detach(device_t dev)
|
||||
{
|
||||
struct hn_softc *sc = device_get_softc(dev);
|
||||
struct hv_device *hv_device = vmbus_get_devctx(dev);
|
||||
|
||||
if (bootverbose)
|
||||
@ -401,6 +474,9 @@ netvsc_detach(device_t dev)
|
||||
|
||||
hv_rf_on_device_remove(hv_device, HV_RF_NV_DESTROY_CHANNEL);
|
||||
|
||||
ifmedia_removeall(&sc->hn_media);
|
||||
tcp_lro_free(&sc->hn_lro);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -887,7 +963,7 @@ netvsc_recv(struct hv_device *device_ctx, netvsc_packet *packet,
|
||||
struct mbuf *m_new;
|
||||
struct ifnet *ifp;
|
||||
device_t dev = device_ctx->device;
|
||||
int size;
|
||||
int size, do_lro = 0;
|
||||
|
||||
if (sc == NULL) {
|
||||
return (0); /* TODO: KYS how can this be! */
|
||||
@ -904,40 +980,44 @@ netvsc_recv(struct hv_device *device_ctx, netvsc_packet *packet,
|
||||
*/
|
||||
if (packet->tot_data_buf_len > (ifp->if_mtu + ETHER_HDR_LEN)) {
|
||||
return (0);
|
||||
} else if (packet->tot_data_buf_len <= MHLEN) {
|
||||
m_new = m_gethdr(M_NOWAIT, MT_DATA);
|
||||
if (m_new == NULL)
|
||||
return (0);
|
||||
memcpy(mtod(m_new, void *), packet->data,
|
||||
packet->tot_data_buf_len);
|
||||
m_new->m_pkthdr.len = m_new->m_len = packet->tot_data_buf_len;
|
||||
sc->hn_small_pkts++;
|
||||
} else {
|
||||
/*
|
||||
* Get an mbuf with a cluster. For packets 2K or less,
|
||||
* get a standard 2K cluster. For anything larger, get a
|
||||
* 4K cluster. Any buffers larger than 4K can cause problems
|
||||
* if looped around to the Hyper-V TX channel, so avoid them.
|
||||
*/
|
||||
size = MCLBYTES;
|
||||
if (packet->tot_data_buf_len > MCLBYTES) {
|
||||
/* 4096 */
|
||||
size = MJUMPAGESIZE;
|
||||
}
|
||||
|
||||
m_new = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, size);
|
||||
if (m_new == NULL) {
|
||||
device_printf(dev, "alloc mbuf failed.\n");
|
||||
return (0);
|
||||
}
|
||||
|
||||
hv_m_append(m_new, packet->tot_data_buf_len, packet->data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get an mbuf with a cluster. For packets 2K or less,
|
||||
* get a standard 2K cluster. For anything larger, get a
|
||||
* 4K cluster. Any buffers larger than 4K can cause problems
|
||||
* if looped around to the Hyper-V TX channel, so avoid them.
|
||||
*/
|
||||
size = MCLBYTES;
|
||||
|
||||
if (packet->tot_data_buf_len > MCLBYTES) {
|
||||
/* 4096 */
|
||||
size = MJUMPAGESIZE;
|
||||
}
|
||||
|
||||
m_new = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, size);
|
||||
|
||||
if (m_new == NULL) {
|
||||
device_printf(dev, "alloc mbuf failed.\n");
|
||||
return (0);
|
||||
}
|
||||
|
||||
hv_m_append(m_new, packet->tot_data_buf_len,
|
||||
packet->data);
|
||||
|
||||
m_new->m_pkthdr.rcvif = ifp;
|
||||
|
||||
/* receive side checksum offload */
|
||||
m_new->m_pkthdr.csum_flags = 0;
|
||||
if (NULL != csum_info) {
|
||||
/* IP csum offload */
|
||||
if (csum_info->receive.ip_csum_succeeded) {
|
||||
m_new->m_pkthdr.csum_flags |=
|
||||
(CSUM_IP_CHECKED | CSUM_IP_VALID);
|
||||
sc->hn_csum_ip++;
|
||||
}
|
||||
|
||||
/* TCP csum offload */
|
||||
@ -945,9 +1025,50 @@ netvsc_recv(struct hv_device *device_ctx, netvsc_packet *packet,
|
||||
m_new->m_pkthdr.csum_flags |=
|
||||
(CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
|
||||
m_new->m_pkthdr.csum_data = 0xffff;
|
||||
sc->hn_csum_tcp++;
|
||||
}
|
||||
|
||||
if (csum_info->receive.ip_csum_succeeded &&
|
||||
csum_info->receive.tcp_csum_succeeded)
|
||||
do_lro = 1;
|
||||
} else {
|
||||
const struct ether_header *eh;
|
||||
uint16_t etype;
|
||||
int hoff;
|
||||
|
||||
hoff = sizeof(*eh);
|
||||
if (m_new->m_len < hoff)
|
||||
goto skip;
|
||||
eh = mtod(m_new, struct ether_header *);
|
||||
etype = ntohs(eh->ether_type);
|
||||
if (etype == ETHERTYPE_VLAN) {
|
||||
const struct ether_vlan_header *evl;
|
||||
|
||||
hoff = sizeof(*evl);
|
||||
if (m_new->m_len < hoff)
|
||||
goto skip;
|
||||
evl = mtod(m_new, struct ether_vlan_header *);
|
||||
etype = ntohs(evl->evl_proto);
|
||||
}
|
||||
|
||||
if (etype == ETHERTYPE_IP) {
|
||||
int pr;
|
||||
|
||||
pr = hn_check_iplen(m_new, hoff);
|
||||
if (pr == IPPROTO_TCP) {
|
||||
if (sc->hn_trust_hosttcp) {
|
||||
sc->hn_csum_trusted++;
|
||||
m_new->m_pkthdr.csum_flags |=
|
||||
(CSUM_IP_CHECKED | CSUM_IP_VALID |
|
||||
CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
|
||||
m_new->m_pkthdr.csum_data = 0xffff;
|
||||
}
|
||||
/* Rely on SW csum verification though... */
|
||||
do_lro = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
skip:
|
||||
if ((packet->vlan_tci != 0) &&
|
||||
(ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) {
|
||||
m_new->m_pkthdr.ether_vtag = packet->vlan_tci;
|
||||
@ -961,12 +1082,37 @@ netvsc_recv(struct hv_device *device_ctx, netvsc_packet *packet,
|
||||
|
||||
if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
|
||||
|
||||
if ((ifp->if_capenable & IFCAP_LRO) && do_lro) {
|
||||
struct lro_ctrl *lro = &sc->hn_lro;
|
||||
|
||||
if (lro->lro_cnt) {
|
||||
sc->hn_lro_tried++;
|
||||
if (tcp_lro_rx(lro, m_new, 0) == 0) {
|
||||
/* DONE! */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* We're not holding the lock here, so don't release it */
|
||||
(*ifp->if_input)(ifp, m_new);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
netvsc_recv_rollup(struct hv_device *device_ctx)
|
||||
{
|
||||
hn_softc_t *sc = device_get_softc(device_ctx->device);
|
||||
struct lro_ctrl *lro = &sc->hn_lro;
|
||||
struct lro_entry *queued;
|
||||
|
||||
while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
|
||||
SLIST_REMOVE_HEAD(&lro->lro_active, next);
|
||||
tcp_lro_flush(lro, queued);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Rules for using sc->temp_unusable:
|
||||
* 1. sc->temp_unusable can only be read or written while holding NV_LOCK()
|
||||
@ -1022,7 +1168,13 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
|
||||
/* Obtain and record requested MTU */
|
||||
ifp->if_mtu = ifr->ifr_mtu;
|
||||
|
||||
/*
|
||||
* Make sure that LRO high watermark is still valid,
|
||||
* after MTU change (the 2*MTU limit).
|
||||
*/
|
||||
if (!HN_LRO_HIWAT_ISVALID(sc, sc->hn_lro_hiwat))
|
||||
hn_set_lro_hiwat(sc, HN_LRO_HIWAT_MTULIM(ifp));
|
||||
|
||||
do {
|
||||
NV_LOCK(sc);
|
||||
if (!sc->temp_unusable) {
|
||||
@ -1147,6 +1299,8 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
ifp->if_capenable |= IFCAP_RXCSUM;
|
||||
}
|
||||
}
|
||||
if (mask & IFCAP_LRO)
|
||||
ifp->if_capenable ^= IFCAP_LRO;
|
||||
|
||||
if (mask & IFCAP_TSO4) {
|
||||
ifp->if_capenable ^= IFCAP_TSO4;
|
||||
@ -1171,10 +1325,11 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
error = 0;
|
||||
}
|
||||
#endif
|
||||
/* FALLTHROUGH */
|
||||
error = EINVAL;
|
||||
break;
|
||||
case SIOCSIFMEDIA:
|
||||
case SIOCGIFMEDIA:
|
||||
error = EINVAL;
|
||||
error = ifmedia_ioctl(ifp, ifr, &sc->hn_media, cmd);
|
||||
break;
|
||||
default:
|
||||
error = ether_ioctl(ifp, cmd, data);
|
||||
@ -1292,6 +1447,102 @@ hn_watchdog(struct ifnet *ifp)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HN_LRO_HIWAT
|
||||
static int
|
||||
hn_lro_hiwat_sysctl(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
struct hn_softc *sc = arg1;
|
||||
int hiwat, error;
|
||||
|
||||
hiwat = sc->hn_lro_hiwat;
|
||||
error = sysctl_handle_int(oidp, &hiwat, 0, req);
|
||||
if (error || req->newptr == NULL)
|
||||
return error;
|
||||
|
||||
if (!HN_LRO_HIWAT_ISVALID(sc, hiwat))
|
||||
return EINVAL;
|
||||
|
||||
if (sc->hn_lro_hiwat != hiwat)
|
||||
hn_set_lro_hiwat(sc, hiwat);
|
||||
return 0;
|
||||
}
|
||||
#endif /* HN_LRO_HIWAT */
|
||||
|
||||
static int
|
||||
hn_check_iplen(const struct mbuf *m, int hoff)
|
||||
{
|
||||
const struct ip *ip;
|
||||
int len, iphlen, iplen;
|
||||
const struct tcphdr *th;
|
||||
int thoff; /* TCP data offset */
|
||||
|
||||
len = hoff + sizeof(struct ip);
|
||||
|
||||
/* The packet must be at least the size of an IP header. */
|
||||
if (m->m_pkthdr.len < len)
|
||||
return IPPROTO_DONE;
|
||||
|
||||
/* The fixed IP header must reside completely in the first mbuf. */
|
||||
if (m->m_len < len)
|
||||
return IPPROTO_DONE;
|
||||
|
||||
ip = mtodo(m, hoff);
|
||||
|
||||
/* Bound check the packet's stated IP header length. */
|
||||
iphlen = ip->ip_hl << 2;
|
||||
if (iphlen < sizeof(struct ip)) /* minimum header length */
|
||||
return IPPROTO_DONE;
|
||||
|
||||
/* The full IP header must reside completely in the one mbuf. */
|
||||
if (m->m_len < hoff + iphlen)
|
||||
return IPPROTO_DONE;
|
||||
|
||||
iplen = ntohs(ip->ip_len);
|
||||
|
||||
/*
|
||||
* Check that the amount of data in the buffers is as
|
||||
* at least much as the IP header would have us expect.
|
||||
*/
|
||||
if (m->m_pkthdr.len < hoff + iplen)
|
||||
return IPPROTO_DONE;
|
||||
|
||||
/*
|
||||
* Ignore IP fragments.
|
||||
*/
|
||||
if (ntohs(ip->ip_off) & (IP_OFFMASK | IP_MF))
|
||||
return IPPROTO_DONE;
|
||||
|
||||
/*
|
||||
* The TCP/IP or UDP/IP header must be entirely contained within
|
||||
* the first fragment of a packet.
|
||||
*/
|
||||
switch (ip->ip_p) {
|
||||
case IPPROTO_TCP:
|
||||
if (iplen < iphlen + sizeof(struct tcphdr))
|
||||
return IPPROTO_DONE;
|
||||
if (m->m_len < hoff + iphlen + sizeof(struct tcphdr))
|
||||
return IPPROTO_DONE;
|
||||
th = (const struct tcphdr *)((const uint8_t *)ip + iphlen);
|
||||
thoff = th->th_off << 2;
|
||||
if (thoff < sizeof(struct tcphdr) || thoff + iphlen > iplen)
|
||||
return IPPROTO_DONE;
|
||||
if (m->m_len < hoff + iphlen + thoff)
|
||||
return IPPROTO_DONE;
|
||||
break;
|
||||
case IPPROTO_UDP:
|
||||
if (iplen < iphlen + sizeof(struct udphdr))
|
||||
return IPPROTO_DONE;
|
||||
if (m->m_len < hoff + iphlen + sizeof(struct udphdr))
|
||||
return IPPROTO_DONE;
|
||||
break;
|
||||
default:
|
||||
if (iplen < iphlen)
|
||||
return IPPROTO_DONE;
|
||||
break;
|
||||
}
|
||||
return ip->ip_p;
|
||||
}
|
||||
|
||||
static device_method_t netvsc_methods[] = {
|
||||
/* Device interface */
|
||||
DEVMETHOD(device_probe, netvsc_probe),
|
||||
@ -1313,6 +1564,3 @@ static devclass_t netvsc_devclass;
|
||||
DRIVER_MODULE(hn, vmbus, netvsc_driver, netvsc_devclass, 0, 0);
|
||||
MODULE_VERSION(hn, 1);
|
||||
MODULE_DEPEND(hn, vmbus, 1, 1, 1);
|
||||
SYSINIT(netvsc_initx, SI_SUB_KTHREAD_IDLE, SI_ORDER_MIDDLE + 1, netvsc_init,
|
||||
NULL);
|
||||
|
||||
|
@ -1049,6 +1049,7 @@ typedef struct rndismp_rx_bufs_info_ {
|
||||
int netvsc_recv(struct hv_device *device_ctx,
|
||||
netvsc_packet *packet,
|
||||
rndis_tcp_ip_csum_info *csum_info);
|
||||
void netvsc_recv_rollup(struct hv_device *device_ctx);
|
||||
|
||||
void* hv_set_rppi_data(rndis_msg *rndis_mesg,
|
||||
uint32_t rppi_size,
|
||||
|
@ -963,3 +963,14 @@ hv_rf_on_send_request_halt_completion(void *context)
|
||||
request->halt_complete_flag = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* RNDIS filter when "all" reception is done
|
||||
*/
|
||||
void
|
||||
hv_rf_receive_rollup(netvsc_dev *net_dev)
|
||||
{
|
||||
rndis_device *rndis_dev;
|
||||
|
||||
rndis_dev = (rndis_device *)net_dev->extension;
|
||||
netvsc_recv_rollup(rndis_dev->net_dev->dev);
|
||||
}
|
||||
|
@ -98,6 +98,7 @@ typedef struct rndis_device_ {
|
||||
|
||||
int hv_rf_on_receive(netvsc_dev *net_dev,
|
||||
struct hv_device *device, netvsc_packet *pkt);
|
||||
void hv_rf_receive_rollup(netvsc_dev *net_dev);
|
||||
int hv_rf_on_device_add(struct hv_device *device, void *additl_info);
|
||||
int hv_rf_on_device_remove(struct hv_device *device, boolean_t destroy_channel);
|
||||
int hv_rf_on_open(struct hv_device *device);
|
||||
|
54
sys/dev/sfxge/common/ef10_impl.h
Normal file
54
sys/dev/sfxge/common/ef10_impl.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are
|
||||
* those of the authors and should not be interpreted as representing official
|
||||
* policies, either expressed or implied, of the FreeBSD Project.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_EF10_IMPL_H
|
||||
#define _SYS_EF10_IMPL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if (EFSYS_OPT_HUNTINGTON && EFSYS_OPT_MEDFORD)
|
||||
#define EF10_MAX_PIOBUF_NBUFS MAX(HUNT_PIOBUF_NBUFS, MEDFORD_PIOBUF_NBUFS)
|
||||
#elif EFSYS_OPT_HUNTINGTON
|
||||
#define EF10_MAX_PIOBUF_NBUFS HUNT_PIOBUF_NBUFS
|
||||
#elif EFSYS_OPT_MEDFORD
|
||||
#define EF10_MAX_PIOBUF_NBUFS MEDFORD_PIOBUF_NBUFS
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_EF10_IMPL_H */
|
@ -287,7 +287,6 @@ sfxge_map_mbuf_fast(bus_dma_tag_t tag, bus_dmamap_t map,
|
||||
#define EFSYS_OPT_RX_SCALE 1
|
||||
#define EFSYS_OPT_QSTATS 1
|
||||
#define EFSYS_OPT_FILTER 1
|
||||
#define EFSYS_OPT_MCAST_FILTER_LIST 1
|
||||
#define EFSYS_OPT_RX_SCATTER 0
|
||||
#define EFSYS_OPT_RX_HDR_SPLIT 0
|
||||
|
||||
|
@ -61,6 +61,7 @@ typedef enum efx_family_e {
|
||||
EFX_FAMILY_FALCON,
|
||||
EFX_FAMILY_SIENA,
|
||||
EFX_FAMILY_HUNTINGTON,
|
||||
EFX_FAMILY_MEDFORD,
|
||||
EFX_FAMILY_NTYPES
|
||||
} efx_family_t;
|
||||
|
||||
@ -90,6 +91,9 @@ efx_infer_family(
|
||||
#define EFX_PCI_DEVID_FARMINGDALE_VF 0x1903 /* SFC9120 VF */
|
||||
#define EFX_PCI_DEVID_GREENPORT_VF 0x1923 /* SFC9140 VF */
|
||||
|
||||
#define EFX_PCI_DEVID_MEDFORD_PF_UNINIT 0x0913
|
||||
#define EFX_PCI_DEVID_MEDFORD 0x0A03 /* SFC9240 PF */
|
||||
#define EFX_PCI_DEVID_MEDFORD_VF 0x1A03 /* SFC9240 VF */
|
||||
|
||||
#define EFX_MEM_BAR 2
|
||||
|
||||
@ -187,8 +191,8 @@ efx_nic_destroy(
|
||||
|
||||
#if EFSYS_OPT_MCDI
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
/* Huntington requires MCDIv2 commands */
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
/* Huntington and Medford require MCDIv2 commands */
|
||||
#define WITH_MCDI_V2 1
|
||||
#endif
|
||||
|
||||
@ -503,36 +507,11 @@ efx_mac_fcntl_get(
|
||||
|
||||
#define EFX_MAC_HASH_BITS (1 << 8)
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_pktfilter_init(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern void
|
||||
efx_pktfilter_fini(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_pktfilter_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in boolean_t unicst,
|
||||
__in boolean_t brdcst);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_mac_hash_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in_ecount(EFX_MAC_HASH_BITS) unsigned int const *bucket);
|
||||
|
||||
#if EFSYS_OPT_MCAST_FILTER_LIST
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_pktfilter_mcast_list_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint8_t const *addrs,
|
||||
__in int count);
|
||||
#endif /* EFSYS_OPT_MCAST_FILTER_LIST */
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_pktfilter_mcast_all(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
#if EFSYS_OPT_MAC_STATS
|
||||
|
||||
@ -590,6 +569,7 @@ typedef enum efx_mon_type_e {
|
||||
EFX_MON_MAX6647,
|
||||
EFX_MON_SFC90X0,
|
||||
EFX_MON_SFC91X0,
|
||||
EFX_MON_SFC92X0,
|
||||
EFX_MON_NTYPES
|
||||
} efx_mon_type_t;
|
||||
|
||||
@ -610,7 +590,7 @@ efx_mon_init(
|
||||
#define EFX_MON_STATS_PAGE_SIZE 0x100
|
||||
#define EFX_MON_MASK_ELEMENT_SIZE 32
|
||||
|
||||
/* START MKCONFIG GENERATED MonitorHeaderStatsBlock c79c86b62a144846 */
|
||||
/* START MKCONFIG GENERATED MonitorHeaderStatsBlock c09b13f732431f23 */
|
||||
typedef enum efx_mon_stat_e {
|
||||
EFX_MON_STAT_2_5V,
|
||||
EFX_MON_STAT_VCCP1,
|
||||
@ -681,6 +661,12 @@ typedef enum efx_mon_stat_e {
|
||||
EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP,
|
||||
EFX_MON_STAT_CONTROLLER_SLAVE_VPTAT_EXT_ADC,
|
||||
EFX_MON_STAT_CONTROLLER_SLAVE_INTERNAL_TEMP_EXT_ADC,
|
||||
EFX_MON_STAT_SODIMM_VOUT,
|
||||
EFX_MON_STAT_SODIMM_0_TEMP,
|
||||
EFX_MON_STAT_SODIMM_1_TEMP,
|
||||
EFX_MON_STAT_PHY0_VCC,
|
||||
EFX_MON_STAT_PHY1_VCC,
|
||||
EFX_MON_STAT_CONTROLLER_TDIODE_TEMP,
|
||||
EFX_MON_NSTATS
|
||||
} efx_mon_stat_t;
|
||||
|
||||
@ -1117,6 +1103,7 @@ typedef struct efx_nic_cfg_s {
|
||||
uint32_t enc_buftbl_limit;
|
||||
uint32_t enc_piobuf_limit;
|
||||
uint32_t enc_piobuf_size;
|
||||
uint32_t enc_piobuf_min_alloc_size;
|
||||
uint32_t enc_evq_timer_quantum_ns;
|
||||
uint32_t enc_evq_timer_max_us;
|
||||
uint32_t enc_clk_mult;
|
||||
@ -1144,20 +1131,20 @@ typedef struct efx_nic_cfg_s {
|
||||
uint32_t enc_mcdi_phy_stat_mask;
|
||||
#endif /* EFSYS_OPT_PHY_STATS */
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
#if (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
#if (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
#if EFSYS_OPT_MON_STATS
|
||||
uint32_t *enc_mcdi_sensor_maskp;
|
||||
uint32_t enc_mcdi_sensor_mask_size;
|
||||
#endif /* EFSYS_OPT_MON_STATS */
|
||||
#endif /* (EFSYS_OPT_SIENA | EFSYS_OPT_HUNTINGTON) */
|
||||
#endif /* (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) */
|
||||
#if EFSYS_OPT_BIST
|
||||
uint32_t enc_bist_mask;
|
||||
#endif /* EFSYS_OPT_BIST */
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
uint32_t enc_pf;
|
||||
uint32_t enc_vf;
|
||||
uint32_t enc_privilege_mask;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
boolean_t enc_bug26807_workaround;
|
||||
boolean_t enc_bug35388_workaround;
|
||||
boolean_t enc_bug41750_workaround;
|
||||
|
@ -52,16 +52,17 @@
|
||||
|
||||
/* Verify chip implements accessed registers */
|
||||
#if EFSYS_OPT_CHECK_REG
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "CHECK_REG requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "CHECK_REG requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_CHECK_REG */
|
||||
|
||||
/* Decode fatal errors */
|
||||
#if EFSYS_OPT_DECODE_INTR_FATAL
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA)
|
||||
# if EFSYS_OPT_HUNTINGTON
|
||||
# error "INTR_FATAL not supported on HUNTINGTON"
|
||||
# if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "INTR_FATAL not supported on HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
# error "INTR_FATAL requires FALCON or SIENA"
|
||||
# endif
|
||||
@ -69,15 +70,17 @@
|
||||
|
||||
/* Support diagnostic hardware tests */
|
||||
#if EFSYS_OPT_DIAG
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "DIAG requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "DIAG requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_DIAG */
|
||||
|
||||
/* Support optimized EVQ data access */
|
||||
#if EFSYS_OPT_EV_PREFETCH
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "EV_PREFETCH requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "EV_PREFETCH requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_EV_PREFETCH */
|
||||
|
||||
@ -90,21 +93,23 @@
|
||||
|
||||
/* Support hardware packet filters */
|
||||
#if EFSYS_OPT_FILTER
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "FILTER requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "FILTER requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_FILTER */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# if !EFSYS_OPT_FILTER
|
||||
# error "HUNTINGTON requires FILTER"
|
||||
# error "HUNTINGTON or MEDFORD requires FILTER"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
/* Support hardware loopback modes */
|
||||
#if EFSYS_OPT_LOOPBACK
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "LOOPBACK requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "LOOPBACK requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_LOOPBACK */
|
||||
|
||||
@ -124,26 +129,26 @@
|
||||
|
||||
/* Support MAC statistics */
|
||||
#if EFSYS_OPT_MAC_STATS
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "MAC_STATS requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "MAC_STATS requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_MAC_STATS */
|
||||
|
||||
/* Support management controller messages */
|
||||
#if EFSYS_OPT_MCDI
|
||||
# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# if EFSYS_OPT_FALCON
|
||||
# error "MCDI not supported on FALCON"
|
||||
# endif
|
||||
# error "MCDI requires SIENA or HUNTINGTON"
|
||||
# error "MCDI requires SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_MCDI */
|
||||
|
||||
#if EFSYS_OPT_SIENA && !EFSYS_OPT_MCDI
|
||||
# error "SIENA requires MCDI"
|
||||
#endif
|
||||
#if EFSYS_OPT_HUNTINGTON && !EFSYS_OPT_MCDI
|
||||
# error "HUNTINGTON requires MCDI"
|
||||
#if (EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# if !EFSYS_OPT_MCDI
|
||||
# error "SIENA or HUNTINGTON or MEDFORD requires MCDI"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Support MCDI logging */
|
||||
@ -193,15 +198,16 @@
|
||||
|
||||
/* Support monitor statistics (voltage/temperature) */
|
||||
#if EFSYS_OPT_MON_STATS
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "MON_STATS requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "MON_STATS requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_MON_STATS */
|
||||
|
||||
/* Support Monitor via mcdi */
|
||||
#if EFSYS_OPT_MON_MCDI
|
||||
# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "MON_MCDI requires SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "MON_MCDI requires SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_MON_MCDI*/
|
||||
|
||||
@ -216,8 +222,9 @@
|
||||
|
||||
/* Support non volatile configuration */
|
||||
#if EFSYS_OPT_NVRAM
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "NVRAM requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "NVRAM requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_NVRAM */
|
||||
|
||||
@ -340,29 +347,33 @@
|
||||
|
||||
/* Support EVQ/RXQ/TXQ statistics */
|
||||
#if EFSYS_OPT_QSTATS
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "QSTATS requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "QSTATS requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_QSTATS */
|
||||
|
||||
/* Support receive header split */
|
||||
#if EFSYS_OPT_RX_HDR_SPLIT
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "RX_HDR_SPLIT requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "RX_HDR_SPLIT requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_RX_HDR_SPLIT */
|
||||
|
||||
/* Support receive scaling (RSS) */
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "RX_SCALE requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "RX_SCALE requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_RX_SCALE */
|
||||
|
||||
/* Support receive scatter DMA */
|
||||
#if EFSYS_OPT_RX_SCATTER
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "RX_SCATTER requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "RX_SCATTER requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_RX_SCATTER */
|
||||
|
||||
@ -373,8 +384,9 @@
|
||||
|
||||
/* Support PCI Vital Product Data (VPD) */
|
||||
#if EFSYS_OPT_VPD
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "VPD requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "VPD requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_VPD */
|
||||
|
||||
@ -385,17 +397,16 @@
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_WOL */
|
||||
|
||||
/* Support calculating multicast pktfilter in common code */
|
||||
#if EFSYS_OPT_MCAST_FILTER_LIST
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "MCAST_FILTER_LIST requires FALCON or SIENA or HUNTINGTON"
|
||||
# endif
|
||||
/* Obsolete option */
|
||||
#ifdef EFSYS_OPT_MCAST_FILTER_LIST
|
||||
# error "MCAST_FILTER_LIST is obsolete and not supported"
|
||||
#endif /* EFSYS_OPT_MCAST_FILTER_LIST */
|
||||
|
||||
/* Support BIST */
|
||||
#if EFSYS_OPT_BIST
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || EFSYS_OPT_HUNTINGTON)
|
||||
# error "BIST requires FALCON or SIENA or HUNTINGTON"
|
||||
# if !(EFSYS_OPT_FALCON || EFSYS_OPT_SIENA || \
|
||||
EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
# error "BIST requires FALCON or SIENA or HUNTINGTON or MEDFORD"
|
||||
# endif
|
||||
#endif /* EFSYS_OPT_BIST */
|
||||
|
||||
|
@ -139,20 +139,20 @@ static efx_ev_ops_t __efx_ev_siena_ops = {
|
||||
};
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
static efx_ev_ops_t __efx_ev_hunt_ops = {
|
||||
hunt_ev_init, /* eevo_init */
|
||||
hunt_ev_fini, /* eevo_fini */
|
||||
hunt_ev_qcreate, /* eevo_qcreate */
|
||||
hunt_ev_qdestroy, /* eevo_qdestroy */
|
||||
hunt_ev_qprime, /* eevo_qprime */
|
||||
hunt_ev_qpost, /* eevo_qpost */
|
||||
hunt_ev_qmoderate, /* eevo_qmoderate */
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
static efx_ev_ops_t __efx_ev_ef10_ops = {
|
||||
ef10_ev_init, /* eevo_init */
|
||||
ef10_ev_fini, /* eevo_fini */
|
||||
ef10_ev_qcreate, /* eevo_qcreate */
|
||||
ef10_ev_qdestroy, /* eevo_qdestroy */
|
||||
ef10_ev_qprime, /* eevo_qprime */
|
||||
ef10_ev_qpost, /* eevo_qpost */
|
||||
ef10_ev_qmoderate, /* eevo_qmoderate */
|
||||
#if EFSYS_OPT_QSTATS
|
||||
hunt_ev_qstats_update, /* eevo_qstats_update */
|
||||
ef10_ev_qstats_update, /* eevo_qstats_update */
|
||||
#endif
|
||||
};
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
@ -185,10 +185,16 @@ efx_ev_init(
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
eevop = (efx_ev_ops_t *)&__efx_ev_hunt_ops;
|
||||
eevop = (efx_ev_ops_t *)&__efx_ev_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
eevop = (efx_ev_ops_t *)&__efx_ev_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
EFSYS_ASSERT(0);
|
||||
rc = ENOTSUP;
|
||||
|
@ -58,6 +58,14 @@
|
||||
#include "hunt_impl.h"
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
#include "medford_impl.h"
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
#if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
#include "ef10_impl.h"
|
||||
#endif /* (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@ -258,16 +266,6 @@ efx_filter_reconfigure(
|
||||
|
||||
#endif /* EFSYS_OPT_FILTER */
|
||||
|
||||
typedef struct efx_pktfilter_ops_s {
|
||||
efx_rc_t (*epfo_set)(efx_nic_t *,
|
||||
boolean_t unicst,
|
||||
boolean_t brdcast);
|
||||
#if EFSYS_OPT_MCAST_FILTER_LIST
|
||||
efx_rc_t (*epfo_mcast_list_set)(efx_nic_t *,
|
||||
uint8_t const *addrs, int count);
|
||||
#endif /* EFSYS_OPT_MCAST_FILTER_LIST */
|
||||
efx_rc_t (*epfo_mcast_all)(efx_nic_t *);
|
||||
} efx_pktfilter_ops_t;
|
||||
|
||||
typedef struct efx_port_s {
|
||||
efx_mac_type_t ep_mac_type;
|
||||
@ -616,7 +614,6 @@ struct efx_nic_s {
|
||||
efx_filter_t en_filter;
|
||||
efx_filter_ops_t *en_efop;
|
||||
#endif /* EFSYS_OPT_FILTER */
|
||||
efx_pktfilter_ops_t *en_epfop;
|
||||
#if EFSYS_OPT_MCDI
|
||||
efx_mcdi_t en_mcdi;
|
||||
#endif /* EFSYS_OPT_MCDI */
|
||||
@ -664,26 +661,29 @@ struct efx_nic_s {
|
||||
int enu_unused;
|
||||
} siena;
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
struct {
|
||||
int enu_vi_base;
|
||||
int enu_vi_count;
|
||||
#if EFSYS_OPT_VPD
|
||||
caddr_t enu_svpd;
|
||||
size_t enu_svpd_length;
|
||||
#endif /* EFSYS_OPT_VPD */
|
||||
efx_piobuf_handle_t enu_piobuf_handle[HUNT_PIOBUF_NBUFS];
|
||||
uint32_t enu_piobuf_count;
|
||||
uint32_t enu_pio_alloc_map[HUNT_PIOBUF_NBUFS];
|
||||
uint32_t enu_pio_write_vi_base;
|
||||
/* Memory BAR mapping regions */
|
||||
uint32_t enu_uc_mem_map_offset;
|
||||
size_t enu_uc_mem_map_size;
|
||||
uint32_t enu_wc_mem_map_offset;
|
||||
size_t enu_wc_mem_map_size;
|
||||
} hunt;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
int enu_unused;
|
||||
} en_u;
|
||||
#if (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD)
|
||||
union en_arch {
|
||||
struct {
|
||||
int ena_vi_base;
|
||||
int ena_vi_count;
|
||||
#if EFSYS_OPT_VPD
|
||||
caddr_t ena_svpd;
|
||||
size_t ena_svpd_length;
|
||||
#endif /* EFSYS_OPT_VPD */
|
||||
efx_piobuf_handle_t ena_piobuf_handle[EF10_MAX_PIOBUF_NBUFS];
|
||||
uint32_t ena_piobuf_count;
|
||||
uint32_t ena_pio_alloc_map[EF10_MAX_PIOBUF_NBUFS];
|
||||
uint32_t ena_pio_write_vi_base;
|
||||
/* Memory BAR mapping regions */
|
||||
uint32_t ena_uc_mem_map_offset;
|
||||
size_t ena_uc_mem_map_size;
|
||||
uint32_t ena_wc_mem_map_offset;
|
||||
size_t ena_wc_mem_map_size;
|
||||
} ef10;
|
||||
} en_arch;
|
||||
#endif /* (EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD) */
|
||||
};
|
||||
|
||||
|
||||
@ -797,6 +797,10 @@ struct efx_txq_s {
|
||||
rev = 'D'; \
|
||||
break; \
|
||||
\
|
||||
case EFX_FAMILY_MEDFORD: \
|
||||
rev = 'E'; \
|
||||
break; \
|
||||
\
|
||||
default: \
|
||||
rev = '?'; \
|
||||
break; \
|
||||
|
@ -101,17 +101,16 @@ static efx_intr_ops_t __efx_intr_siena_ops = {
|
||||
};
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
static efx_intr_ops_t __efx_intr_hunt_ops = {
|
||||
hunt_intr_init, /* eio_init */
|
||||
hunt_intr_enable, /* eio_enable */
|
||||
hunt_intr_disable, /* eio_disable */
|
||||
hunt_intr_disable_unlocked, /* eio_disable_unlocked */
|
||||
hunt_intr_trigger, /* eio_trigger */
|
||||
hunt_intr_fini, /* eio_fini */
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
static efx_intr_ops_t __efx_intr_ef10_ops = {
|
||||
ef10_intr_init, /* eio_init */
|
||||
ef10_intr_enable, /* eio_enable */
|
||||
ef10_intr_disable, /* eio_disable */
|
||||
ef10_intr_disable_unlocked, /* eio_disable_unlocked */
|
||||
ef10_intr_trigger, /* eio_trigger */
|
||||
ef10_intr_fini, /* eio_fini */
|
||||
};
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_intr_init(
|
||||
@ -152,10 +151,16 @@ efx_intr_init(
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
eiop = (efx_intr_ops_t *)&__efx_intr_hunt_ops;
|
||||
eiop = (efx_intr_ops_t *)&__efx_intr_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
eiop = (efx_intr_ops_t *)&__efx_intr_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
EFSYS_ASSERT(B_FALSE);
|
||||
rc = ENOTSUP;
|
||||
|
@ -56,20 +56,20 @@ static efx_mcdi_ops_t __efx_mcdi_siena_ops = {
|
||||
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
|
||||
static efx_mcdi_ops_t __efx_mcdi_hunt_ops = {
|
||||
hunt_mcdi_init, /* emco_init */
|
||||
hunt_mcdi_request_copyin, /* emco_request_copyin */
|
||||
hunt_mcdi_request_copyout, /* emco_request_copyout */
|
||||
hunt_mcdi_poll_reboot, /* emco_poll_reboot */
|
||||
hunt_mcdi_poll_response, /* emco_poll_response */
|
||||
hunt_mcdi_read_response, /* emco_read_response */
|
||||
hunt_mcdi_fini, /* emco_fini */
|
||||
hunt_mcdi_feature_supported, /* emco_feature_supported */
|
||||
static efx_mcdi_ops_t __efx_mcdi_ef10_ops = {
|
||||
ef10_mcdi_init, /* emco_init */
|
||||
ef10_mcdi_request_copyin, /* emco_request_copyin */
|
||||
ef10_mcdi_request_copyout, /* emco_request_copyout */
|
||||
ef10_mcdi_poll_reboot, /* emco_poll_reboot */
|
||||
ef10_mcdi_poll_response, /* emco_poll_response */
|
||||
ef10_mcdi_read_response, /* emco_read_response */
|
||||
ef10_mcdi_fini, /* emco_fini */
|
||||
ef10_mcdi_feature_supported, /* emco_feature_supported */
|
||||
};
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
|
||||
|
||||
@ -100,10 +100,16 @@ efx_mcdi_init(
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
emcop = (efx_mcdi_ops_t *)&__efx_mcdi_hunt_ops;
|
||||
emcop = (efx_mcdi_ops_t *)&__efx_mcdi_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
emcop = (efx_mcdi_ops_t *)&__efx_mcdi_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
EFSYS_ASSERT(0);
|
||||
rc = ENOTSUP;
|
||||
@ -1491,7 +1497,7 @@ efx_mcdi_mac_spoofing_supported(
|
||||
|
||||
#if EFSYS_OPT_BIST
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
/*
|
||||
* Enter bist offline mode. This is a fw mode which puts the NIC into a state
|
||||
* where memory BIST tests can be run and not much else can interfere or happen.
|
||||
@ -1527,7 +1533,7 @@ efx_mcdi_bist_enable_offline(
|
||||
|
||||
return (rc);
|
||||
}
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_mcdi_bist_start(
|
||||
@ -1788,7 +1794,7 @@ efx_mcdi_mac_stats_periodic(
|
||||
|
||||
#endif /* EFSYS_OPT_MAC_STATS */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
|
||||
/*
|
||||
* This function returns the pf and vf number of a function. If it is a pf the
|
||||
@ -1887,7 +1893,7 @@ efx_mcdi_privilege_mask(
|
||||
return (rc);
|
||||
}
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_mcdi_set_workaround(
|
||||
|
@ -188,11 +188,11 @@ efx_mcdi_mac_spoofing_supported(
|
||||
|
||||
|
||||
#if EFSYS_OPT_BIST
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_mcdi_bist_enable_offline(
|
||||
__in efx_nic_t *enp);
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_mcdi_bist_start(
|
||||
__in efx_nic_t *enp,
|
||||
|
@ -62,6 +62,7 @@ static const char *__efx_mon_name[] = {
|
||||
"max6647",
|
||||
"sfx90x0",
|
||||
"sfx91x0"
|
||||
"sfx92x0"
|
||||
};
|
||||
|
||||
const char *
|
||||
@ -119,34 +120,6 @@ static efx_mon_ops_t __efx_mon_mcdi_ops = {
|
||||
};
|
||||
#endif
|
||||
|
||||
static efx_mon_ops_t *__efx_mon_ops[] = {
|
||||
NULL,
|
||||
#if EFSYS_OPT_MON_NULL
|
||||
&__efx_mon_null_ops,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
#if EFSYS_OPT_MON_LM87
|
||||
&__efx_mon_lm87_ops,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
#if EFSYS_OPT_MON_MAX6647
|
||||
&__efx_mon_max6647_ops,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
#if EFSYS_OPT_MON_MCDI
|
||||
&__efx_mon_mcdi_ops,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
#if EFSYS_OPT_MON_MCDI
|
||||
&__efx_mon_mcdi_ops
|
||||
#else
|
||||
NULL
|
||||
#endif
|
||||
};
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_mon_init(
|
||||
@ -170,8 +143,30 @@ efx_mon_init(
|
||||
emp->em_type = encp->enc_mon_type;
|
||||
|
||||
EFSYS_ASSERT(encp->enc_mon_type != EFX_MON_INVALID);
|
||||
EFSYS_ASSERT3U(emp->em_type, <, EFX_MON_NTYPES);
|
||||
if ((emop = (efx_mon_ops_t *)__efx_mon_ops[emp->em_type]) == NULL) {
|
||||
switch (emp->em_type) {
|
||||
#if EFSYS_OPT_MON_NULL
|
||||
case EFX_MON_NULL:
|
||||
emop = &__efx_mon_null_ops;
|
||||
break;
|
||||
#endif
|
||||
#if EFSYS_OPT_MON_LM87
|
||||
case EFX_MON_LM87:
|
||||
emop = &__efx_mon_lm87_ops;
|
||||
break;
|
||||
#endif
|
||||
#if EFSYS_OPT_MON_MAX6647
|
||||
case EFX_MON_MAX6647:
|
||||
emop = &__efx_mon_max6647_ops;
|
||||
break;
|
||||
#endif
|
||||
#if EFSYS_OPT_MON_MCDI
|
||||
case EFX_MON_SFC90X0:
|
||||
case EFX_MON_SFC91X0:
|
||||
case EFX_MON_SFC92X0:
|
||||
emop = &__efx_mon_mcdi_ops;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
rc = ENOTSUP;
|
||||
goto fail2;
|
||||
}
|
||||
@ -214,7 +209,7 @@ efx_mon_init(
|
||||
|
||||
#if EFSYS_OPT_NAMES
|
||||
|
||||
/* START MKCONFIG GENERATED MonitorStatNamesBlock b9328f15438c4d01 */
|
||||
/* START MKCONFIG GENERATED MonitorStatNamesBlock 01ee3ea01f23a0c4 */
|
||||
static const char *__mon_stat_name[] = {
|
||||
"value_2_5v",
|
||||
"value_vccp1",
|
||||
@ -285,6 +280,12 @@ static const char *__mon_stat_name[] = {
|
||||
"controller_slave_internal_temp",
|
||||
"controller_slave_vptat_ext_adc",
|
||||
"controller_slave_internal_temp_ext_adc",
|
||||
"sodimm_vout",
|
||||
"sodimm_0_temp",
|
||||
"sodimm_1_temp",
|
||||
"phy0_vcc",
|
||||
"phy1_vcc",
|
||||
"controller_tdiode_temp",
|
||||
};
|
||||
|
||||
/* END MKCONFIG GENERATED MonitorStatNamesBlock */
|
||||
|
@ -49,7 +49,8 @@ efx_family(
|
||||
case EFX_PCI_DEVID_FALCON:
|
||||
*efp = EFX_FAMILY_FALCON;
|
||||
return (0);
|
||||
#endif
|
||||
#endif /* EFSYS_OPT_FALCON */
|
||||
|
||||
#if EFSYS_OPT_SIENA
|
||||
case EFX_PCI_DEVID_SIENA_F1_UNINIT:
|
||||
/*
|
||||
@ -63,7 +64,7 @@ efx_family(
|
||||
case EFX_PCI_DEVID_SIENA:
|
||||
*efp = EFX_FAMILY_SIENA;
|
||||
return (0);
|
||||
#endif
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
case EFX_PCI_DEVID_HUNTINGTON_PF_UNINIT:
|
||||
@ -83,7 +84,26 @@ efx_family(
|
||||
case EFX_PCI_DEVID_GREENPORT_VF:
|
||||
*efp = EFX_FAMILY_HUNTINGTON;
|
||||
return (0);
|
||||
#endif
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_PCI_DEVID_MEDFORD_PF_UNINIT:
|
||||
/*
|
||||
* Hardware default for PF0 of uninitialised Medford.
|
||||
* manftest must be able to cope with this device id.
|
||||
*/
|
||||
*efp = EFX_FAMILY_MEDFORD;
|
||||
return (0);
|
||||
|
||||
case EFX_PCI_DEVID_MEDFORD:
|
||||
*efp = EFX_FAMILY_MEDFORD;
|
||||
return (0);
|
||||
|
||||
case EFX_PCI_DEVID_MEDFORD_VF:
|
||||
*efp = EFX_FAMILY_MEDFORD;
|
||||
return (0);
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -110,8 +130,12 @@ efx_infer_family(
|
||||
|
||||
EFSYS_BAR_READO(esbp, FR_AZ_CS_DEBUG_REG_OFST, &oword, B_TRUE);
|
||||
portnum = EFX_OWORD_FIELD(oword, FRF_CZ_CS_PORT_NUM);
|
||||
switch (portnum) {
|
||||
case 0: {
|
||||
if ((portnum == 1) || (portnum == 2)) {
|
||||
#if EFSYS_OPT_SIENA
|
||||
family = EFX_FAMILY_SIENA;
|
||||
goto out;
|
||||
#endif
|
||||
} else if (portnum == 0) {
|
||||
efx_dword_t dword;
|
||||
uint32_t hw_rev;
|
||||
|
||||
@ -119,31 +143,25 @@ efx_infer_family(
|
||||
B_TRUE);
|
||||
hw_rev = EFX_DWORD_FIELD(dword, ERF_DZ_HW_REV_ID);
|
||||
if (hw_rev == ER_DZ_BIU_HW_REV_ID_REG_RESET) {
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
/*
|
||||
* BIU_HW_REV_ID is the same for Huntington and Medford.
|
||||
* Assume Huntington, as Medford is very similar.
|
||||
*/
|
||||
family = EFX_FAMILY_HUNTINGTON;
|
||||
break;
|
||||
goto out;
|
||||
#endif
|
||||
} else {
|
||||
#if EFSYS_OPT_FALCON
|
||||
family = EFX_FAMILY_FALCON;
|
||||
break;
|
||||
goto out;
|
||||
#endif
|
||||
}
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
#if EFSYS_OPT_SIENA
|
||||
case 1:
|
||||
case 2:
|
||||
family = EFX_FAMILY_SIENA;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
|
||||
out:
|
||||
if (efp != NULL)
|
||||
*efp = family;
|
||||
return (0);
|
||||
@ -273,7 +291,7 @@ static efx_nic_ops_t __efx_nic_hunt_ops = {
|
||||
hunt_nic_get_vi_pool, /* eno_get_vi_pool */
|
||||
hunt_nic_get_bar_region, /* eno_get_bar_region */
|
||||
#if EFSYS_OPT_DIAG
|
||||
hunt_sram_test, /* eno_sram_test */
|
||||
ef10_sram_test, /* eno_sram_test */
|
||||
hunt_nic_register_test, /* eno_register_test */
|
||||
#endif /* EFSYS_OPT_DIAG */
|
||||
hunt_nic_fini, /* eno_fini */
|
||||
|
@ -75,23 +75,23 @@ static efx_nvram_ops_t __efx_nvram_siena_ops = {
|
||||
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
|
||||
static efx_nvram_ops_t __efx_nvram_hunt_ops = {
|
||||
static efx_nvram_ops_t __efx_nvram_ef10_ops = {
|
||||
#if EFSYS_OPT_DIAG
|
||||
hunt_nvram_test, /* envo_test */
|
||||
ef10_nvram_test, /* envo_test */
|
||||
#endif /* EFSYS_OPT_DIAG */
|
||||
hunt_nvram_size, /* envo_size */
|
||||
hunt_nvram_get_version, /* envo_get_version */
|
||||
hunt_nvram_rw_start, /* envo_rw_start */
|
||||
hunt_nvram_read_chunk, /* envo_read_chunk */
|
||||
hunt_nvram_erase, /* envo_erase */
|
||||
hunt_nvram_write_chunk, /* envo_write_chunk */
|
||||
hunt_nvram_rw_finish, /* envo_rw_finish */
|
||||
hunt_nvram_set_version, /* envo_set_version */
|
||||
ef10_nvram_size, /* envo_size */
|
||||
ef10_nvram_get_version, /* envo_get_version */
|
||||
ef10_nvram_rw_start, /* envo_rw_start */
|
||||
ef10_nvram_read_chunk, /* envo_read_chunk */
|
||||
ef10_nvram_erase, /* envo_erase */
|
||||
ef10_nvram_write_chunk, /* envo_write_chunk */
|
||||
ef10_nvram_rw_finish, /* envo_rw_finish */
|
||||
ef10_nvram_set_version, /* envo_set_version */
|
||||
};
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_nvram_init(
|
||||
@ -119,10 +119,16 @@ efx_nvram_init(
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
envop = (efx_nvram_ops_t *)&__efx_nvram_hunt_ops;
|
||||
envop = (efx_nvram_ops_t *)&__efx_nvram_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
envop = (efx_nvram_ops_t *)&__efx_nvram_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
EFSYS_ASSERT(0);
|
||||
rc = ENOTSUP;
|
||||
|
@ -175,29 +175,29 @@ static efx_rx_ops_t __efx_rx_siena_ops = {
|
||||
};
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
static efx_rx_ops_t __efx_rx_hunt_ops = {
|
||||
hunt_rx_init, /* erxo_init */
|
||||
hunt_rx_fini, /* erxo_fini */
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
static efx_rx_ops_t __efx_rx_ef10_ops = {
|
||||
ef10_rx_init, /* erxo_init */
|
||||
ef10_rx_fini, /* erxo_fini */
|
||||
#if EFSYS_OPT_RX_HDR_SPLIT
|
||||
hunt_rx_hdr_split_enable, /* erxo_hdr_split_enable */
|
||||
ef10_rx_hdr_split_enable, /* erxo_hdr_split_enable */
|
||||
#endif
|
||||
#if EFSYS_OPT_RX_SCATTER
|
||||
hunt_rx_scatter_enable, /* erxo_scatter_enable */
|
||||
ef10_rx_scatter_enable, /* erxo_scatter_enable */
|
||||
#endif
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
hunt_rx_scale_mode_set, /* erxo_scale_mode_set */
|
||||
hunt_rx_scale_key_set, /* erxo_scale_key_set */
|
||||
hunt_rx_scale_tbl_set, /* erxo_scale_tbl_set */
|
||||
ef10_rx_scale_mode_set, /* erxo_scale_mode_set */
|
||||
ef10_rx_scale_key_set, /* erxo_scale_key_set */
|
||||
ef10_rx_scale_tbl_set, /* erxo_scale_tbl_set */
|
||||
#endif
|
||||
hunt_rx_qpost, /* erxo_qpost */
|
||||
hunt_rx_qpush, /* erxo_qpush */
|
||||
hunt_rx_qflush, /* erxo_qflush */
|
||||
hunt_rx_qenable, /* erxo_qenable */
|
||||
hunt_rx_qcreate, /* erxo_qcreate */
|
||||
hunt_rx_qdestroy, /* erxo_qdestroy */
|
||||
ef10_rx_qpost, /* erxo_qpost */
|
||||
ef10_rx_qpush, /* erxo_qpush */
|
||||
ef10_rx_qflush, /* erxo_qflush */
|
||||
ef10_rx_qenable, /* erxo_qenable */
|
||||
ef10_rx_qcreate, /* erxo_qcreate */
|
||||
ef10_rx_qdestroy, /* erxo_qdestroy */
|
||||
};
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
@ -235,10 +235,16 @@ efx_rx_init(
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
erxop = (efx_rx_ops_t *)&__efx_rx_hunt_ops;
|
||||
erxop = (efx_rx_ops_t *)&__efx_rx_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
erxop = (efx_rx_ops_t *)&__efx_rx_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
EFSYS_ASSERT(0);
|
||||
rc = ENOTSUP;
|
||||
@ -607,7 +613,7 @@ efx_rx_qdestroy(
|
||||
* Hash values are in network (big-endian) byte order.
|
||||
*
|
||||
*
|
||||
* On Huntington the pseudo-header is laid out as:
|
||||
* On EF10 the pseudo-header is laid out as:
|
||||
* (See also SF-109306-TC section 9)
|
||||
*
|
||||
* Toeplitz hash (32 bits, little-endian)
|
||||
@ -629,7 +635,8 @@ efx_psuedo_hdr_pkt_length_get(
|
||||
__in uint8_t *buffer,
|
||||
__out uint16_t *pkt_lengthp)
|
||||
{
|
||||
if (enp->en_family != EFX_FAMILY_HUNTINGTON) {
|
||||
if (enp->en_family != EFX_FAMILY_HUNTINGTON &&
|
||||
enp->en_family != EFX_FAMILY_MEDFORD) {
|
||||
EFSYS_ASSERT(0);
|
||||
return (ENOTSUP);
|
||||
}
|
||||
@ -656,6 +663,7 @@ efx_psuedo_hdr_hash_get(
|
||||
(buffer[14] << 8) |
|
||||
buffer[15]);
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
return (buffer[0] |
|
||||
(buffer[1] << 8) |
|
||||
(buffer[2] << 16) |
|
||||
|
@ -55,20 +55,21 @@ efx_sram_buf_tbl_set(
|
||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
|
||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NIC);
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
if (enp->en_family == EFX_FAMILY_HUNTINGTON) {
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
if (enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD) {
|
||||
/*
|
||||
* FIXME: the efx_sram_buf_tbl_*() functionality needs to be
|
||||
* pulled inside the Falcon/Siena queue create/destroy code,
|
||||
* and then the original functions can be removed (see bug30834
|
||||
* comment #1). But, for now, we just ensure that they are
|
||||
* no-ops for Huntington, to allow bringing up existing drivers
|
||||
* no-ops for EF10, to allow bringing up existing drivers
|
||||
* without modification.
|
||||
*/
|
||||
|
||||
return (0);
|
||||
}
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
if (stop >= EFX_BUF_TBL_SIZE) {
|
||||
rc = EFBIG;
|
||||
@ -176,20 +177,21 @@ efx_sram_buf_tbl_clear(
|
||||
EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
|
||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_NIC);
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
if (enp->en_family == EFX_FAMILY_HUNTINGTON) {
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
if (enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD) {
|
||||
/*
|
||||
* FIXME: the efx_sram_buf_tbl_*() functionality needs to be
|
||||
* pulled inside the Falcon/Siena queue create/destroy code,
|
||||
* and then the original functions can be removed (see bug30834
|
||||
* comment #1). But, for now, we just ensure that they are
|
||||
* no-ops for Huntington, to allow bringing up existing drivers
|
||||
* no-ops for EF10, to allow bringing up existing drivers
|
||||
* without modification.
|
||||
*/
|
||||
|
||||
return;
|
||||
}
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
EFSYS_ASSERT3U(stop, <, EFX_BUF_TBL_SIZE);
|
||||
|
||||
|
@ -179,29 +179,54 @@ static efx_tx_ops_t __efx_tx_siena_ops = {
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
static efx_tx_ops_t __efx_tx_hunt_ops = {
|
||||
hunt_tx_init, /* etxo_init */
|
||||
hunt_tx_fini, /* etxo_fini */
|
||||
hunt_tx_qcreate, /* etxo_qcreate */
|
||||
hunt_tx_qdestroy, /* etxo_qdestroy */
|
||||
hunt_tx_qpost, /* etxo_qpost */
|
||||
hunt_tx_qpush, /* etxo_qpush */
|
||||
hunt_tx_qpace, /* etxo_qpace */
|
||||
hunt_tx_qflush, /* etxo_qflush */
|
||||
hunt_tx_qenable, /* etxo_qenable */
|
||||
hunt_tx_qpio_enable, /* etxo_qpio_enable */
|
||||
hunt_tx_qpio_disable, /* etxo_qpio_disable */
|
||||
hunt_tx_qpio_write, /* etxo_qpio_write */
|
||||
hunt_tx_qpio_post, /* etxo_qpio_post */
|
||||
hunt_tx_qdesc_post, /* etxo_qdesc_post */
|
||||
hunt_tx_qdesc_dma_create, /* etxo_qdesc_dma_create */
|
||||
ef10_tx_init, /* etxo_init */
|
||||
ef10_tx_fini, /* etxo_fini */
|
||||
ef10_tx_qcreate, /* etxo_qcreate */
|
||||
ef10_tx_qdestroy, /* etxo_qdestroy */
|
||||
ef10_tx_qpost, /* etxo_qpost */
|
||||
ef10_tx_qpush, /* etxo_qpush */
|
||||
ef10_tx_qpace, /* etxo_qpace */
|
||||
ef10_tx_qflush, /* etxo_qflush */
|
||||
ef10_tx_qenable, /* etxo_qenable */
|
||||
ef10_tx_qpio_enable, /* etxo_qpio_enable */
|
||||
ef10_tx_qpio_disable, /* etxo_qpio_disable */
|
||||
ef10_tx_qpio_write, /* etxo_qpio_write */
|
||||
ef10_tx_qpio_post, /* etxo_qpio_post */
|
||||
ef10_tx_qdesc_post, /* etxo_qdesc_post */
|
||||
ef10_tx_qdesc_dma_create, /* etxo_qdesc_dma_create */
|
||||
hunt_tx_qdesc_tso_create, /* etxo_qdesc_tso_create */
|
||||
hunt_tx_qdesc_vlantci_create, /* etxo_qdesc_vlantci_create */
|
||||
ef10_tx_qdesc_vlantci_create, /* etxo_qdesc_vlantci_create */
|
||||
#if EFSYS_OPT_QSTATS
|
||||
hunt_tx_qstats_update, /* etxo_qstats_update */
|
||||
ef10_tx_qstats_update, /* etxo_qstats_update */
|
||||
#endif
|
||||
};
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
static efx_tx_ops_t __efx_tx_medford_ops = {
|
||||
ef10_tx_init, /* etxo_init */
|
||||
ef10_tx_fini, /* etxo_fini */
|
||||
ef10_tx_qcreate, /* etxo_qcreate */
|
||||
ef10_tx_qdestroy, /* etxo_qdestroy */
|
||||
ef10_tx_qpost, /* etxo_qpost */
|
||||
ef10_tx_qpush, /* etxo_qpush */
|
||||
ef10_tx_qpace, /* etxo_qpace */
|
||||
ef10_tx_qflush, /* etxo_qflush */
|
||||
ef10_tx_qenable, /* etxo_qenable */
|
||||
ef10_tx_qpio_enable, /* etxo_qpio_enable */
|
||||
ef10_tx_qpio_disable, /* etxo_qpio_disable */
|
||||
ef10_tx_qpio_write, /* etxo_qpio_write */
|
||||
ef10_tx_qpio_post, /* etxo_qpio_post */
|
||||
ef10_tx_qdesc_post, /* etxo_qdesc_post */
|
||||
ef10_tx_qdesc_dma_create, /* etxo_qdesc_dma_create */
|
||||
NULL, /* etxo_qdesc_tso_create */
|
||||
ef10_tx_qdesc_vlantci_create, /* etxo_qdesc_vlantci_create */
|
||||
#if EFSYS_OPT_QSTATS
|
||||
ef10_tx_qstats_update, /* etxo_qstats_update */
|
||||
#endif
|
||||
};
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_tx_init(
|
||||
__in efx_nic_t *enp)
|
||||
@ -241,6 +266,12 @@ efx_tx_init(
|
||||
break;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
etxop = (efx_tx_ops_t *)&__efx_tx_medford_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
EFSYS_ASSERT(0);
|
||||
rc = ENOTSUP;
|
||||
|
@ -91,22 +91,22 @@ static efx_vpd_ops_t __efx_vpd_siena_ops = {
|
||||
|
||||
#endif /* EFSYS_OPT_SIENA */
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
|
||||
static efx_vpd_ops_t __efx_vpd_hunt_ops = {
|
||||
hunt_vpd_init, /* evpdo_init */
|
||||
hunt_vpd_size, /* evpdo_size */
|
||||
hunt_vpd_read, /* evpdo_read */
|
||||
hunt_vpd_verify, /* evpdo_verify */
|
||||
hunt_vpd_reinit, /* evpdo_reinit */
|
||||
hunt_vpd_get, /* evpdo_get */
|
||||
hunt_vpd_set, /* evpdo_set */
|
||||
hunt_vpd_next, /* evpdo_next */
|
||||
hunt_vpd_write, /* evpdo_write */
|
||||
hunt_vpd_fini, /* evpdo_fini */
|
||||
static efx_vpd_ops_t __efx_vpd_ef10_ops = {
|
||||
ef10_vpd_init, /* evpdo_init */
|
||||
ef10_vpd_size, /* evpdo_size */
|
||||
ef10_vpd_read, /* evpdo_read */
|
||||
ef10_vpd_verify, /* evpdo_verify */
|
||||
ef10_vpd_reinit, /* evpdo_reinit */
|
||||
ef10_vpd_get, /* evpdo_get */
|
||||
ef10_vpd_set, /* evpdo_set */
|
||||
ef10_vpd_next, /* evpdo_next */
|
||||
ef10_vpd_write, /* evpdo_write */
|
||||
ef10_vpd_fini, /* evpdo_fini */
|
||||
};
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
efx_vpd_init(
|
||||
@ -134,10 +134,16 @@ efx_vpd_init(
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
evpdop = (efx_vpd_ops_t *)&__efx_vpd_hunt_ops;
|
||||
evpdop = (efx_vpd_ops_t *)&__efx_vpd_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
evpdop = (efx_vpd_ops_t *)&__efx_vpd_ef10_ops;
|
||||
break;
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
||||
|
||||
default:
|
||||
EFSYS_ASSERT(0);
|
||||
rc = ENOTSUP;
|
||||
|
@ -54,35 +54,35 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_rx(
|
||||
ef10_ev_rx(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
__in_opt void *arg);
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_tx(
|
||||
ef10_ev_tx(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
__in_opt void *arg);
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_driver(
|
||||
ef10_ev_driver(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
__in_opt void *arg);
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_drv_gen(
|
||||
ef10_ev_drv_gen(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
__in_opt void *arg);
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_mcdi(
|
||||
ef10_ev_mcdi(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
@ -230,7 +230,7 @@ efx_mcdi_fini_evq(
|
||||
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_init(
|
||||
ef10_ev_init(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
@ -238,14 +238,14 @@ hunt_ev_init(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_ev_fini(
|
||||
ef10_ev_fini(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_qcreate(
|
||||
ef10_ev_qcreate(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int index,
|
||||
__in efsys_mem_t *esmp,
|
||||
@ -272,11 +272,11 @@ hunt_ev_qcreate(
|
||||
}
|
||||
|
||||
/* Set up the handler table */
|
||||
eep->ee_rx = hunt_ev_rx;
|
||||
eep->ee_tx = hunt_ev_tx;
|
||||
eep->ee_driver = hunt_ev_driver;
|
||||
eep->ee_drv_gen = hunt_ev_drv_gen;
|
||||
eep->ee_mcdi = hunt_ev_mcdi;
|
||||
eep->ee_rx = ef10_ev_rx;
|
||||
eep->ee_tx = ef10_ev_tx;
|
||||
eep->ee_driver = ef10_ev_driver;
|
||||
eep->ee_drv_gen = ef10_ev_drv_gen;
|
||||
eep->ee_mcdi = ef10_ev_mcdi;
|
||||
|
||||
/*
|
||||
* Set up the event queue
|
||||
@ -299,18 +299,19 @@ hunt_ev_qcreate(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_ev_qdestroy(
|
||||
ef10_ev_qdestroy(
|
||||
__in efx_evq_t *eep)
|
||||
{
|
||||
efx_nic_t *enp = eep->ee_enp;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
(void) efx_mcdi_fini_evq(eep->ee_enp, eep->ee_index);
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_qprime(
|
||||
ef10_ev_qprime(
|
||||
__in efx_evq_t *eep,
|
||||
__in unsigned int count)
|
||||
{
|
||||
@ -390,7 +391,7 @@ efx_mcdi_driver_event(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_ev_qpost(
|
||||
ef10_ev_qpost(
|
||||
__in efx_evq_t *eep,
|
||||
__in uint16_t data)
|
||||
{
|
||||
@ -406,7 +407,7 @@ hunt_ev_qpost(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_qmoderate(
|
||||
ef10_ev_qmoderate(
|
||||
__in efx_evq_t *eep,
|
||||
__in unsigned int us)
|
||||
{
|
||||
@ -463,14 +464,10 @@ hunt_ev_qmoderate(
|
||||
|
||||
#if EFSYS_OPT_QSTATS
|
||||
void
|
||||
hunt_ev_qstats_update(
|
||||
ef10_ev_qstats_update(
|
||||
__in efx_evq_t *eep,
|
||||
__inout_ecount(EV_NQSTATS) efsys_stat_t *stat)
|
||||
{
|
||||
/*
|
||||
* TBD: Consider a common Siena/Huntington function. The code is
|
||||
* essentially identical.
|
||||
*/
|
||||
unsigned int id;
|
||||
|
||||
for (id = 0; id < EV_NQSTATS; id++) {
|
||||
@ -484,7 +481,7 @@ hunt_ev_qstats_update(
|
||||
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_rx(
|
||||
ef10_ev_rx(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
@ -691,7 +688,7 @@ hunt_ev_rx(
|
||||
}
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_tx(
|
||||
ef10_ev_tx(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
@ -726,7 +723,7 @@ hunt_ev_tx(
|
||||
}
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_driver(
|
||||
ef10_ev_driver(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
@ -776,7 +773,7 @@ hunt_ev_driver(
|
||||
}
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_drv_gen(
|
||||
ef10_ev_drv_gen(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
@ -804,7 +801,7 @@ hunt_ev_drv_gen(
|
||||
}
|
||||
|
||||
static __checkReturn boolean_t
|
||||
hunt_ev_mcdi(
|
||||
ef10_ev_mcdi(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_qword_t *eqp,
|
||||
__in const efx_ev_callbacks_t *eecp,
|
||||
@ -1000,7 +997,7 @@ hunt_ev_mcdi(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_ev_rxlabel_init(
|
||||
ef10_ev_rxlabel_init(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_rxq_t *erp,
|
||||
__in unsigned int label)
|
||||
@ -1017,7 +1014,7 @@ hunt_ev_rxlabel_init(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_ev_rxlabel_fini(
|
||||
ef10_ev_rxlabel_fini(
|
||||
__in efx_evq_t *eep,
|
||||
__in unsigned int label)
|
||||
{
|
||||
|
@ -1351,7 +1351,7 @@ hunt_filter_default_rxq_set(
|
||||
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
EFSYS_ASSERT((using_rss == B_FALSE) ||
|
||||
(enp->en_rss_context != HUNTINGTON_RSS_CONTEXT_INVALID));
|
||||
(enp->en_rss_context != EF10_RSS_CONTEXT_INVALID));
|
||||
table->hft_using_rss = using_rss;
|
||||
#else
|
||||
EFSYS_ASSERT(using_rss == B_FALSE);
|
||||
|
@ -42,7 +42,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define HUNTINGTON_NVRAM_CHUNK 0x80
|
||||
/*
|
||||
* FIXME: This is just a power of 2 which fits in an MCDI v1 message, and could
|
||||
* possibly be increased, or the write size reported by newer firmware used
|
||||
* instead.
|
||||
*/
|
||||
#define EF10_NVRAM_CHUNK 0x80
|
||||
|
||||
/* Alignment requirement for value written to RX WPTR:
|
||||
* the WPTR must be aligned to an 8 descriptor boundary
|
||||
@ -50,21 +55,21 @@ extern "C" {
|
||||
#define HUNTINGTON_RX_WPTR_ALIGN 8
|
||||
|
||||
/* Invalid RSS context handle */
|
||||
#define HUNTINGTON_RSS_CONTEXT_INVALID (0xffffffff)
|
||||
#define EF10_RSS_CONTEXT_INVALID (0xffffffff)
|
||||
|
||||
|
||||
/* EV */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_init(
|
||||
ef10_ev_init(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
void
|
||||
hunt_ev_fini(
|
||||
ef10_ev_fini(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_qcreate(
|
||||
ef10_ev_qcreate(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int index,
|
||||
__in efsys_mem_t *esmp,
|
||||
@ -73,69 +78,69 @@ hunt_ev_qcreate(
|
||||
__in efx_evq_t *eep);
|
||||
|
||||
void
|
||||
hunt_ev_qdestroy(
|
||||
ef10_ev_qdestroy(
|
||||
__in efx_evq_t *eep);
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_qprime(
|
||||
ef10_ev_qprime(
|
||||
__in efx_evq_t *eep,
|
||||
__in unsigned int count);
|
||||
|
||||
void
|
||||
hunt_ev_qpost(
|
||||
ef10_ev_qpost(
|
||||
__in efx_evq_t *eep,
|
||||
__in uint16_t data);
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_ev_qmoderate(
|
||||
ef10_ev_qmoderate(
|
||||
__in efx_evq_t *eep,
|
||||
__in unsigned int us);
|
||||
|
||||
#if EFSYS_OPT_QSTATS
|
||||
void
|
||||
hunt_ev_qstats_update(
|
||||
ef10_ev_qstats_update(
|
||||
__in efx_evq_t *eep,
|
||||
__inout_ecount(EV_NQSTATS) efsys_stat_t *stat);
|
||||
#endif /* EFSYS_OPT_QSTATS */
|
||||
|
||||
void
|
||||
hunt_ev_rxlabel_init(
|
||||
ef10_ev_rxlabel_init(
|
||||
__in efx_evq_t *eep,
|
||||
__in efx_rxq_t *erp,
|
||||
__in unsigned int label);
|
||||
|
||||
void
|
||||
hunt_ev_rxlabel_fini(
|
||||
ef10_ev_rxlabel_fini(
|
||||
__in efx_evq_t *eep,
|
||||
__in unsigned int label);
|
||||
|
||||
/* INTR */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_intr_init(
|
||||
ef10_intr_init(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_intr_type_t type,
|
||||
__in efsys_mem_t *esmp);
|
||||
|
||||
void
|
||||
hunt_intr_enable(
|
||||
ef10_intr_enable(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
void
|
||||
hunt_intr_disable(
|
||||
ef10_intr_disable(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
void
|
||||
hunt_intr_disable_unlocked(
|
||||
ef10_intr_disable_unlocked(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_intr_trigger(
|
||||
ef10_intr_trigger(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int level);
|
||||
|
||||
void
|
||||
hunt_intr_fini(
|
||||
ef10_intr_fini(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
/* NIC */
|
||||
@ -247,16 +252,16 @@ hunt_mac_stats_update(
|
||||
#if EFSYS_OPT_MCDI
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_mcdi_init(
|
||||
ef10_mcdi_init(
|
||||
__in efx_nic_t *enp,
|
||||
__in const efx_mcdi_transport_t *mtp);
|
||||
|
||||
extern void
|
||||
hunt_mcdi_fini(
|
||||
ef10_mcdi_fini(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern void
|
||||
hunt_mcdi_request_copyin(
|
||||
ef10_mcdi_request_copyin(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_mcdi_req_t *emrp,
|
||||
__in unsigned int seq,
|
||||
@ -264,27 +269,27 @@ hunt_mcdi_request_copyin(
|
||||
__in boolean_t new_epoch);
|
||||
|
||||
extern __checkReturn boolean_t
|
||||
hunt_mcdi_poll_response(
|
||||
ef10_mcdi_poll_response(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern void
|
||||
hunt_mcdi_read_response(
|
||||
ef10_mcdi_read_response(
|
||||
__in efx_nic_t *enp,
|
||||
__out void *bufferp,
|
||||
__in size_t offset,
|
||||
__in size_t length);
|
||||
|
||||
extern void
|
||||
hunt_mcdi_request_copyout(
|
||||
ef10_mcdi_request_copyout(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_mcdi_req_t *emrp);
|
||||
|
||||
extern efx_rc_t
|
||||
hunt_mcdi_poll_reboot(
|
||||
ef10_mcdi_poll_reboot(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_mcdi_feature_supported(
|
||||
ef10_mcdi_feature_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_mcdi_feature_id_t id,
|
||||
__out boolean_t *supportedp);
|
||||
@ -296,7 +301,7 @@ hunt_mcdi_feature_supported(
|
||||
#if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_buf_read_tlv(
|
||||
ef10_nvram_buf_read_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(max_seg_size) caddr_t seg_data,
|
||||
__in size_t max_seg_size,
|
||||
@ -305,7 +310,7 @@ hunt_nvram_buf_read_tlv(
|
||||
__out size_t *sizep);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_buf_write_tlv(
|
||||
ef10_nvram_buf_write_tlv(
|
||||
__inout_bcount(partn_size) caddr_t partn_data,
|
||||
__in size_t partn_size,
|
||||
__in uint32_t tag,
|
||||
@ -314,7 +319,7 @@ hunt_nvram_buf_write_tlv(
|
||||
__out size_t *total_lengthp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_read_tlv(
|
||||
ef10_nvram_partn_read_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in uint32_t tag,
|
||||
@ -322,7 +327,7 @@ hunt_nvram_partn_read_tlv(
|
||||
__out size_t *sizep);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_write_tlv(
|
||||
ef10_nvram_partn_write_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in uint32_t tag,
|
||||
@ -330,7 +335,7 @@ hunt_nvram_partn_write_tlv(
|
||||
__in size_t size);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_write_segment_tlv(
|
||||
ef10_nvram_partn_write_segment_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in uint32_t tag,
|
||||
@ -339,18 +344,18 @@ hunt_nvram_partn_write_segment_tlv(
|
||||
__in boolean_t all_segments);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_size(
|
||||
ef10_nvram_partn_size(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__out size_t *sizep);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_lock(
|
||||
ef10_nvram_partn_lock(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_read(
|
||||
ef10_nvram_partn_read(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in unsigned int offset,
|
||||
@ -358,14 +363,14 @@ hunt_nvram_partn_read(
|
||||
__in size_t size);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_erase(
|
||||
ef10_nvram_partn_erase(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in unsigned int offset,
|
||||
__in size_t size);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_write(
|
||||
ef10_nvram_partn_write(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in unsigned int offset,
|
||||
@ -373,7 +378,7 @@ hunt_nvram_partn_write(
|
||||
__in size_t size);
|
||||
|
||||
extern void
|
||||
hunt_nvram_partn_unlock(
|
||||
ef10_nvram_partn_unlock(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn);
|
||||
|
||||
@ -384,32 +389,32 @@ hunt_nvram_partn_unlock(
|
||||
#if EFSYS_OPT_DIAG
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_test(
|
||||
ef10_nvram_test(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
#endif /* EFSYS_OPT_DIAG */
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_size(
|
||||
ef10_nvram_size(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__out size_t *sizep);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_get_version(
|
||||
ef10_nvram_get_version(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__out uint32_t *subtypep,
|
||||
__out_ecount(4) uint16_t version[4]);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_rw_start(
|
||||
ef10_nvram_rw_start(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__out size_t *pref_chunkp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_read_chunk(
|
||||
ef10_nvram_read_chunk(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__in unsigned int offset,
|
||||
@ -417,12 +422,12 @@ hunt_nvram_read_chunk(
|
||||
__in size_t size);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_erase(
|
||||
ef10_nvram_erase(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_write_chunk(
|
||||
ef10_nvram_write_chunk(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__in unsigned int offset,
|
||||
@ -430,18 +435,18 @@ hunt_nvram_write_chunk(
|
||||
__in size_t size);
|
||||
|
||||
extern void
|
||||
hunt_nvram_rw_finish(
|
||||
ef10_nvram_rw_finish(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_partn_set_version(
|
||||
ef10_nvram_partn_set_version(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in_ecount(4) uint16_t version[4]);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_nvram_set_version(
|
||||
ef10_nvram_set_version(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__in_ecount(4) uint16_t version[4]);
|
||||
@ -562,7 +567,7 @@ hunt_bist_stop(
|
||||
#if EFSYS_OPT_DIAG
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_sram_test(
|
||||
ef10_sram_test(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_sram_pattern_fn_t func);
|
||||
|
||||
@ -572,15 +577,15 @@ hunt_sram_test(
|
||||
/* TX */
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_init(
|
||||
ef10_tx_init(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern void
|
||||
hunt_tx_fini(
|
||||
ef10_tx_fini(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qcreate(
|
||||
ef10_tx_qcreate(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int index,
|
||||
__in unsigned int label,
|
||||
@ -593,11 +598,11 @@ hunt_tx_qcreate(
|
||||
__out unsigned int *addedp);
|
||||
|
||||
extern void
|
||||
hunt_tx_qdestroy(
|
||||
ef10_tx_qdestroy(
|
||||
__in efx_txq_t *etp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qpost(
|
||||
ef10_tx_qpost(
|
||||
__in efx_txq_t *etp,
|
||||
__in_ecount(n) efx_buffer_t *eb,
|
||||
__in unsigned int n,
|
||||
@ -605,48 +610,48 @@ hunt_tx_qpost(
|
||||
__inout unsigned int *addedp);
|
||||
|
||||
extern void
|
||||
hunt_tx_qpush(
|
||||
ef10_tx_qpush(
|
||||
__in efx_txq_t *etp,
|
||||
__in unsigned int added,
|
||||
__in unsigned int pushed);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qpace(
|
||||
ef10_tx_qpace(
|
||||
__in efx_txq_t *etp,
|
||||
__in unsigned int ns);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qflush(
|
||||
ef10_tx_qflush(
|
||||
__in efx_txq_t *etp);
|
||||
|
||||
extern void
|
||||
hunt_tx_qenable(
|
||||
ef10_tx_qenable(
|
||||
__in efx_txq_t *etp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qpio_enable(
|
||||
ef10_tx_qpio_enable(
|
||||
__in efx_txq_t *etp);
|
||||
|
||||
extern void
|
||||
hunt_tx_qpio_disable(
|
||||
ef10_tx_qpio_disable(
|
||||
__in efx_txq_t *etp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qpio_write(
|
||||
ef10_tx_qpio_write(
|
||||
__in efx_txq_t *etp,
|
||||
__in_ecount(buf_length) uint8_t *buffer,
|
||||
__in size_t buf_length,
|
||||
__in size_t pio_buf_offset);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qpio_post(
|
||||
ef10_tx_qpio_post(
|
||||
__in efx_txq_t *etp,
|
||||
__in size_t pkt_length,
|
||||
__in unsigned int completed,
|
||||
__inout unsigned int *addedp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_tx_qdesc_post(
|
||||
ef10_tx_qdesc_post(
|
||||
__in efx_txq_t *etp,
|
||||
__in_ecount(n) efx_desc_t *ed,
|
||||
__in unsigned int n,
|
||||
@ -654,7 +659,7 @@ hunt_tx_qdesc_post(
|
||||
__inout unsigned int *addedp);
|
||||
|
||||
extern void
|
||||
hunt_tx_qdesc_dma_create(
|
||||
ef10_tx_qdesc_dma_create(
|
||||
__in efx_txq_t *etp,
|
||||
__in efsys_dma_addr_t addr,
|
||||
__in size_t size,
|
||||
@ -670,7 +675,7 @@ hunt_tx_qdesc_tso_create(
|
||||
__out efx_desc_t *edp);
|
||||
|
||||
extern void
|
||||
hunt_tx_qdesc_vlantci_create(
|
||||
ef10_tx_qdesc_vlantci_create(
|
||||
__in efx_txq_t *etp,
|
||||
__in uint16_t vlan_tci,
|
||||
__out efx_desc_t *edp);
|
||||
@ -679,7 +684,7 @@ hunt_tx_qdesc_vlantci_create(
|
||||
#if EFSYS_OPT_QSTATS
|
||||
|
||||
extern void
|
||||
hunt_tx_qstats_update(
|
||||
ef10_tx_qstats_update(
|
||||
__in efx_txq_t *etp,
|
||||
__inout_ecount(TX_NQSTATS) efsys_stat_t *stat);
|
||||
|
||||
@ -758,48 +763,48 @@ hunt_nic_pio_unlink(
|
||||
#if EFSYS_OPT_VPD
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_init(
|
||||
ef10_vpd_init(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_size(
|
||||
ef10_vpd_size(
|
||||
__in efx_nic_t *enp,
|
||||
__out size_t *sizep);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_read(
|
||||
ef10_vpd_read(
|
||||
__in efx_nic_t *enp,
|
||||
__out_bcount(size) caddr_t data,
|
||||
__in size_t size);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_verify(
|
||||
ef10_vpd_verify(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_reinit(
|
||||
ef10_vpd_reinit(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_get(
|
||||
ef10_vpd_get(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size,
|
||||
__inout efx_vpd_value_t *evvp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_set(
|
||||
ef10_vpd_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size,
|
||||
__in efx_vpd_value_t *evvp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_next(
|
||||
ef10_vpd_next(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size,
|
||||
@ -807,13 +812,13 @@ hunt_vpd_next(
|
||||
__inout unsigned int *contp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_vpd_write(
|
||||
ef10_vpd_write(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size);
|
||||
|
||||
extern void
|
||||
hunt_vpd_fini(
|
||||
ef10_vpd_fini(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
#endif /* EFSYS_OPT_VPD */
|
||||
@ -822,12 +827,12 @@ hunt_vpd_fini(
|
||||
/* RX */
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_init(
|
||||
ef10_rx_init(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
#if EFSYS_OPT_RX_HDR_SPLIT
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_hdr_split_enable(
|
||||
ef10_rx_hdr_split_enable(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int hdr_buf_size,
|
||||
__in unsigned int pld_buf_size);
|
||||
@ -835,7 +840,7 @@ hunt_rx_hdr_split_enable(
|
||||
|
||||
#if EFSYS_OPT_RX_SCATTER
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_scatter_enable(
|
||||
ef10_rx_scatter_enable(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int buf_size);
|
||||
#endif /* EFSYS_OPT_RX_SCATTER */
|
||||
@ -844,20 +849,20 @@ hunt_rx_scatter_enable(
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_scale_mode_set(
|
||||
ef10_rx_scale_mode_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_rx_hash_alg_t alg,
|
||||
__in efx_rx_hash_type_t type,
|
||||
__in boolean_t insert);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_scale_key_set(
|
||||
ef10_rx_scale_key_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in_ecount(n) uint8_t *key,
|
||||
__in size_t n);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_scale_tbl_set(
|
||||
ef10_rx_scale_tbl_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in_ecount(n) unsigned int *table,
|
||||
__in size_t n);
|
||||
@ -865,7 +870,7 @@ hunt_rx_scale_tbl_set(
|
||||
#endif /* EFSYS_OPT_RX_SCALE */
|
||||
|
||||
extern void
|
||||
hunt_rx_qpost(
|
||||
ef10_rx_qpost(
|
||||
__in efx_rxq_t *erp,
|
||||
__in_ecount(n) efsys_dma_addr_t *addrp,
|
||||
__in size_t size,
|
||||
@ -874,21 +879,21 @@ hunt_rx_qpost(
|
||||
__in unsigned int added);
|
||||
|
||||
extern void
|
||||
hunt_rx_qpush(
|
||||
ef10_rx_qpush(
|
||||
__in efx_rxq_t *erp,
|
||||
__in unsigned int added,
|
||||
__inout unsigned int *pushedp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_qflush(
|
||||
ef10_rx_qflush(
|
||||
__in efx_rxq_t *erp);
|
||||
|
||||
extern void
|
||||
hunt_rx_qenable(
|
||||
ef10_rx_qenable(
|
||||
__in efx_rxq_t *erp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_rx_qcreate(
|
||||
ef10_rx_qcreate(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int index,
|
||||
__in unsigned int label,
|
||||
@ -900,11 +905,11 @@ hunt_rx_qcreate(
|
||||
__in efx_rxq_t *erp);
|
||||
|
||||
extern void
|
||||
hunt_rx_qdestroy(
|
||||
ef10_rx_qdestroy(
|
||||
__in efx_rxq_t *erp);
|
||||
|
||||
extern void
|
||||
hunt_rx_fini(
|
||||
ef10_rx_fini(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
#if EFSYS_OPT_FILTER
|
||||
@ -1002,26 +1007,6 @@ hunt_filter_default_rxq_clear(
|
||||
|
||||
#endif /* EFSYS_OPT_FILTER */
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_pktfilter_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in boolean_t unicst,
|
||||
__in boolean_t brdcst);
|
||||
|
||||
#if EFSYS_OPT_MCAST_FILTER_LIST
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_pktfilter_mcast_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint8_t const *addrs,
|
||||
__in int count);
|
||||
|
||||
#endif /* EFSYS_OPT_MCAST_FILTER_LIST */
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
hunt_pktfilter_mcast_all(
|
||||
__in efx_nic_t *enp);
|
||||
|
||||
extern __checkReturn efx_rc_t
|
||||
efx_mcdi_get_function_info(
|
||||
__in efx_nic_t *enp,
|
||||
|
@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_intr_init(
|
||||
ef10_intr_init(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_intr_type_t type,
|
||||
__in efsys_mem_t *esmp)
|
||||
@ -50,7 +50,7 @@ hunt_intr_init(
|
||||
|
||||
|
||||
void
|
||||
hunt_intr_enable(
|
||||
ef10_intr_enable(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
@ -58,7 +58,7 @@ hunt_intr_enable(
|
||||
|
||||
|
||||
void
|
||||
hunt_intr_disable(
|
||||
ef10_intr_disable(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
@ -66,7 +66,7 @@ hunt_intr_disable(
|
||||
|
||||
|
||||
void
|
||||
hunt_intr_disable_unlocked(
|
||||
ef10_intr_disable_unlocked(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
@ -83,7 +83,8 @@ efx_mcdi_trigger_interrupt(
|
||||
MC_CMD_TRIGGER_INTERRUPT_OUT_LEN)];
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
if (level >= enp->en_nic_cfg.enc_intr_limit) {
|
||||
rc = EINVAL;
|
||||
@ -118,7 +119,7 @@ efx_mcdi_trigger_interrupt(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_intr_trigger(
|
||||
ef10_intr_trigger(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int level)
|
||||
{
|
||||
@ -126,7 +127,10 @@ hunt_intr_trigger(
|
||||
efx_rc_t rc;
|
||||
|
||||
if (encp->enc_bug41750_workaround) {
|
||||
/* bug 41750: Test interrupts don't work on Greenport */
|
||||
/*
|
||||
* bug 41750: Test interrupts don't work on Greenport
|
||||
* bug 50084: Test interrupts don't work on VFs
|
||||
*/
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
@ -146,7 +150,7 @@ hunt_intr_trigger(
|
||||
|
||||
|
||||
void
|
||||
hunt_intr_fini(
|
||||
ef10_intr_fini(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
|
@ -36,12 +36,12 @@ __FBSDID("$FreeBSD$");
|
||||
#include "efx_impl.h"
|
||||
|
||||
|
||||
#if EFSYS_OPT_HUNTINGTON
|
||||
#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
|
||||
|
||||
#if EFSYS_OPT_MCDI
|
||||
|
||||
#ifndef WITH_MCDI_V2
|
||||
#error "WITH_MCDI_V2 required for Huntington MCDIv2 commands."
|
||||
#error "WITH_MCDI_V2 required for EF10 MCDIv2 commands."
|
||||
#endif
|
||||
|
||||
typedef enum efx_mcdi_header_type_e {
|
||||
@ -77,7 +77,7 @@ typedef enum efx_mcdi_header_type_e {
|
||||
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_mcdi_init(
|
||||
ef10_mcdi_init(
|
||||
__in efx_nic_t *enp,
|
||||
__in const efx_mcdi_transport_t *emtp)
|
||||
{
|
||||
@ -85,10 +85,11 @@ hunt_mcdi_init(
|
||||
efx_dword_t dword;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
EFSYS_ASSERT(enp->en_features & EFX_FEATURE_MCDI_DMA);
|
||||
|
||||
/* A host DMA buffer is required for Huntington MCDI */
|
||||
/* A host DMA buffer is required for EF10 MCDI */
|
||||
if (esmp == NULL) {
|
||||
rc = EINVAL;
|
||||
goto fail1;
|
||||
@ -107,7 +108,7 @@ hunt_mcdi_init(
|
||||
EFX_BAR_WRITED(enp, ER_DZ_MC_DB_HWRD_REG, &dword, B_FALSE);
|
||||
|
||||
/* Save initial MC reboot status */
|
||||
(void) hunt_mcdi_poll_reboot(enp);
|
||||
(void) ef10_mcdi_poll_reboot(enp);
|
||||
|
||||
/* Start a new epoch (allow fresh MCDI requests to succeed) */
|
||||
efx_mcdi_new_epoch(enp);
|
||||
@ -123,7 +124,7 @@ hunt_mcdi_init(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_mcdi_fini(
|
||||
ef10_mcdi_fini(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip);
|
||||
@ -132,7 +133,7 @@ hunt_mcdi_fini(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_mcdi_request_copyin(
|
||||
ef10_mcdi_request_copyin(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_mcdi_req_t *emrp,
|
||||
__in unsigned int seq,
|
||||
@ -148,7 +149,8 @@ hunt_mcdi_request_copyin(
|
||||
unsigned int pos;
|
||||
size_t offset;
|
||||
|
||||
EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
xflags = 0;
|
||||
if (ev_cpl)
|
||||
@ -225,7 +227,7 @@ hunt_mcdi_request_copyin(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_mcdi_request_copyout(
|
||||
ef10_mcdi_request_copyout(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_mcdi_req_t *emrp)
|
||||
{
|
||||
@ -241,13 +243,13 @@ hunt_mcdi_request_copyout(
|
||||
|
||||
/* Read the command header to detect MCDI response format */
|
||||
hdr_len = sizeof (hdr[0]);
|
||||
hunt_mcdi_read_response(enp, &hdr[0], 0, hdr_len);
|
||||
ef10_mcdi_read_response(enp, &hdr[0], 0, hdr_len);
|
||||
if (EFX_DWORD_FIELD(hdr[0], MCDI_HEADER_CODE) == MC_CMD_V2_EXTN) {
|
||||
/*
|
||||
* Read the actual payload length. The length given in the event
|
||||
* is only correct for responses with the V1 format.
|
||||
*/
|
||||
hunt_mcdi_read_response(enp, &hdr[1], hdr_len, sizeof (hdr[1]));
|
||||
ef10_mcdi_read_response(enp, &hdr[1], hdr_len, sizeof (hdr[1]));
|
||||
hdr_len += sizeof (hdr[1]);
|
||||
|
||||
emrp->emr_out_length_used = EFX_DWORD_FIELD(hdr[1],
|
||||
@ -256,7 +258,7 @@ hunt_mcdi_request_copyout(
|
||||
|
||||
/* Copy payload out into caller supplied buffer */
|
||||
bytes = MIN(emrp->emr_out_length_used, emrp->emr_out_length);
|
||||
hunt_mcdi_read_response(enp, emrp->emr_out_buf, hdr_len, bytes);
|
||||
ef10_mcdi_read_response(enp, emrp->emr_out_buf, hdr_len, bytes);
|
||||
|
||||
#if EFSYS_OPT_MCDI_LOGGING
|
||||
if (emtp->emt_logger != NULL) {
|
||||
@ -269,7 +271,7 @@ hunt_mcdi_request_copyout(
|
||||
}
|
||||
|
||||
__checkReturn boolean_t
|
||||
hunt_mcdi_poll_response(
|
||||
ef10_mcdi_poll_response(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp;
|
||||
@ -281,7 +283,7 @@ hunt_mcdi_poll_response(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_mcdi_read_response(
|
||||
ef10_mcdi_read_response(
|
||||
__in efx_nic_t *enp,
|
||||
__out void *bufferp,
|
||||
__in size_t offset,
|
||||
@ -300,7 +302,7 @@ hunt_mcdi_read_response(
|
||||
}
|
||||
|
||||
efx_rc_t
|
||||
hunt_mcdi_poll_reboot(
|
||||
ef10_mcdi_poll_reboot(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip);
|
||||
@ -324,7 +326,7 @@ hunt_mcdi_poll_reboot(
|
||||
*
|
||||
* The Siena support for checking for MC reboot from status
|
||||
* flags is broken - see comments in siena_mcdi_poll_reboot().
|
||||
* As the generic MCDI code is shared the Huntington reboot
|
||||
* As the generic MCDI code is shared the EF10 reboot
|
||||
* detection suffers similar problems.
|
||||
*
|
||||
* Do not report an error when the boot status changes until
|
||||
@ -346,7 +348,7 @@ hunt_mcdi_poll_reboot(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_mcdi_feature_supported(
|
||||
ef10_mcdi_feature_supported(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_mcdi_feature_id_t id,
|
||||
__out boolean_t *supportedp)
|
||||
@ -355,7 +357,8 @@ hunt_mcdi_feature_supported(
|
||||
uint32_t privilege_mask = encp->enc_privilege_mask;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
/*
|
||||
* Use privilege mask state at MCDI attach.
|
||||
@ -417,4 +420,4 @@ hunt_mcdi_feature_supported(
|
||||
|
||||
#endif /* EFSYS_OPT_MCDI */
|
||||
|
||||
#endif /* EFSYS_OPT_HUNTINGTON */
|
||||
#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
|
||||
|
@ -715,30 +715,30 @@ hunt_nic_alloc_piobufs(
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT3U(max_piobuf_count, <=,
|
||||
EFX_ARRAY_SIZE(enp->en_u.hunt.enu_piobuf_handle));
|
||||
EFX_ARRAY_SIZE(enp->en_arch.ef10.ena_piobuf_handle));
|
||||
|
||||
enp->en_u.hunt.enu_piobuf_count = 0;
|
||||
enp->en_arch.ef10.ena_piobuf_count = 0;
|
||||
|
||||
for (i = 0; i < max_piobuf_count; i++) {
|
||||
handlep = &enp->en_u.hunt.enu_piobuf_handle[i];
|
||||
handlep = &enp->en_arch.ef10.ena_piobuf_handle[i];
|
||||
|
||||
if ((rc = efx_mcdi_alloc_piobuf(enp, handlep)) != 0)
|
||||
goto fail1;
|
||||
|
||||
enp->en_u.hunt.enu_pio_alloc_map[i] = 0;
|
||||
enp->en_u.hunt.enu_piobuf_count++;
|
||||
enp->en_arch.ef10.ena_pio_alloc_map[i] = 0;
|
||||
enp->en_arch.ef10.ena_piobuf_count++;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
fail1:
|
||||
for (i = 0; i < enp->en_u.hunt.enu_piobuf_count; i++) {
|
||||
handlep = &enp->en_u.hunt.enu_piobuf_handle[i];
|
||||
for (i = 0; i < enp->en_arch.ef10.ena_piobuf_count; i++) {
|
||||
handlep = &enp->en_arch.ef10.ena_piobuf_handle[i];
|
||||
|
||||
efx_mcdi_free_piobuf(enp, *handlep);
|
||||
*handlep = EFX_PIOBUF_HANDLE_INVALID;
|
||||
}
|
||||
enp->en_u.hunt.enu_piobuf_count = 0;
|
||||
enp->en_arch.ef10.ena_piobuf_count = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -749,13 +749,13 @@ hunt_nic_free_piobufs(
|
||||
efx_piobuf_handle_t *handlep;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < enp->en_u.hunt.enu_piobuf_count; i++) {
|
||||
handlep = &enp->en_u.hunt.enu_piobuf_handle[i];
|
||||
for (i = 0; i < enp->en_arch.ef10.ena_piobuf_count; i++) {
|
||||
handlep = &enp->en_arch.ef10.ena_piobuf_handle[i];
|
||||
|
||||
efx_mcdi_free_piobuf(enp, *handlep);
|
||||
*handlep = EFX_PIOBUF_HANDLE_INVALID;
|
||||
}
|
||||
enp->en_u.hunt.enu_piobuf_count = 0;
|
||||
enp->en_arch.ef10.ena_piobuf_count = 0;
|
||||
}
|
||||
|
||||
/* Sub-allocate a block from a piobuf */
|
||||
@ -768,6 +768,7 @@ hunt_nic_pio_alloc(
|
||||
__out uint32_t *offsetp,
|
||||
__out size_t *sizep)
|
||||
{
|
||||
efx_nic_cfg_t *encp = &enp->en_nic_cfg;
|
||||
efx_drv_cfg_t *edcp = &enp->en_drv_cfg;
|
||||
uint32_t blk_per_buf;
|
||||
uint32_t buf, blk;
|
||||
@ -781,14 +782,14 @@ hunt_nic_pio_alloc(
|
||||
EFSYS_ASSERT(sizep);
|
||||
|
||||
if ((edcp->edc_pio_alloc_size == 0) ||
|
||||
(enp->en_u.hunt.enu_piobuf_count == 0)) {
|
||||
(enp->en_arch.ef10.ena_piobuf_count == 0)) {
|
||||
rc = ENOMEM;
|
||||
goto fail1;
|
||||
}
|
||||
blk_per_buf = HUNT_PIOBUF_SIZE / edcp->edc_pio_alloc_size;
|
||||
blk_per_buf = encp->enc_piobuf_size / edcp->edc_pio_alloc_size;
|
||||
|
||||
for (buf = 0; buf < enp->en_u.hunt.enu_piobuf_count; buf++) {
|
||||
uint32_t *map = &enp->en_u.hunt.enu_pio_alloc_map[buf];
|
||||
for (buf = 0; buf < enp->en_arch.ef10.ena_piobuf_count; buf++) {
|
||||
uint32_t *map = &enp->en_arch.ef10.ena_pio_alloc_map[buf];
|
||||
|
||||
if (~(*map) == 0)
|
||||
continue;
|
||||
@ -805,7 +806,7 @@ hunt_nic_pio_alloc(
|
||||
goto fail2;
|
||||
|
||||
done:
|
||||
*handlep = enp->en_u.hunt.enu_piobuf_handle[buf];
|
||||
*handlep = enp->en_arch.ef10.ena_piobuf_handle[buf];
|
||||
*bufnump = buf;
|
||||
*blknump = blk;
|
||||
*sizep = edcp->edc_pio_alloc_size;
|
||||
@ -831,13 +832,13 @@ hunt_nic_pio_free(
|
||||
uint32_t *map;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((bufnum >= enp->en_u.hunt.enu_piobuf_count) ||
|
||||
if ((bufnum >= enp->en_arch.ef10.ena_piobuf_count) ||
|
||||
(blknum >= (8 * sizeof (*map)))) {
|
||||
rc = EINVAL;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
map = &enp->en_u.hunt.enu_pio_alloc_map[bufnum];
|
||||
map = &enp->en_arch.ef10.ena_pio_alloc_map[bufnum];
|
||||
if ((*map & (1u << blknum)) == 0) {
|
||||
rc = ENOENT;
|
||||
goto fail2;
|
||||
@ -1260,6 +1261,7 @@ hunt_board_cfg(
|
||||
|
||||
encp->enc_piobuf_limit = HUNT_PIOBUF_NBUFS;
|
||||
encp->enc_piobuf_size = HUNT_PIOBUF_SIZE;
|
||||
encp->enc_piobuf_min_alloc_size = HUNT_MIN_PIO_ALLOC_SIZE;
|
||||
|
||||
/*
|
||||
* Get the current privilege mask. Note that this may be modified
|
||||
@ -1470,7 +1472,8 @@ hunt_nic_set_drv_limits(
|
||||
uint32_t blk_size, blk_count, blks_per_piobuf;
|
||||
|
||||
blk_size =
|
||||
MAX(edlp->edl_min_pio_alloc_size, HUNT_MIN_PIO_ALLOC_SIZE);
|
||||
MAX(edlp->edl_min_pio_alloc_size,
|
||||
encp->enc_piobuf_min_alloc_size);
|
||||
|
||||
blks_per_piobuf = encp->enc_piobuf_size / blk_size;
|
||||
EFSYS_ASSERT3U(blks_per_piobuf, <=, 32);
|
||||
@ -1579,7 +1582,8 @@ hunt_nic_init(
|
||||
* each VI that is using a sub-allocated block from the piobuf.
|
||||
*/
|
||||
min_vi_count = edcp->edc_min_vi_count;
|
||||
max_vi_count = edcp->edc_max_vi_count + enp->en_u.hunt.enu_piobuf_count;
|
||||
max_vi_count =
|
||||
edcp->edc_max_vi_count + enp->en_arch.ef10.ena_piobuf_count;
|
||||
|
||||
/* Ensure that the previously attached driver's VIs are freed */
|
||||
if ((rc = efx_mcdi_free_vis(enp)) != 0)
|
||||
@ -1601,44 +1605,44 @@ hunt_nic_init(
|
||||
goto fail4;
|
||||
}
|
||||
|
||||
enp->en_u.hunt.enu_vi_base = vi_base;
|
||||
enp->en_u.hunt.enu_vi_count = vi_count;
|
||||
enp->en_arch.ef10.ena_vi_base = vi_base;
|
||||
enp->en_arch.ef10.ena_vi_count = vi_count;
|
||||
|
||||
if (vi_count < min_vi_count + enp->en_u.hunt.enu_piobuf_count) {
|
||||
if (vi_count < min_vi_count + enp->en_arch.ef10.ena_piobuf_count) {
|
||||
/* Not enough extra VIs to map piobufs */
|
||||
hunt_nic_free_piobufs(enp);
|
||||
}
|
||||
|
||||
enp->en_u.hunt.enu_pio_write_vi_base =
|
||||
vi_count - enp->en_u.hunt.enu_piobuf_count;
|
||||
enp->en_arch.ef10.ena_pio_write_vi_base =
|
||||
vi_count - enp->en_arch.ef10.ena_piobuf_count;
|
||||
|
||||
/* Save UC memory mapping details */
|
||||
enp->en_u.hunt.enu_uc_mem_map_offset = 0;
|
||||
if (enp->en_u.hunt.enu_piobuf_count > 0) {
|
||||
enp->en_u.hunt.enu_uc_mem_map_size =
|
||||
enp->en_arch.ef10.ena_uc_mem_map_offset = 0;
|
||||
if (enp->en_arch.ef10.ena_piobuf_count > 0) {
|
||||
enp->en_arch.ef10.ena_uc_mem_map_size =
|
||||
(ER_DZ_TX_PIOBUF_STEP *
|
||||
enp->en_u.hunt.enu_pio_write_vi_base);
|
||||
enp->en_arch.ef10.ena_pio_write_vi_base);
|
||||
} else {
|
||||
enp->en_u.hunt.enu_uc_mem_map_size =
|
||||
enp->en_arch.ef10.ena_uc_mem_map_size =
|
||||
(ER_DZ_TX_PIOBUF_STEP *
|
||||
enp->en_u.hunt.enu_vi_count);
|
||||
enp->en_arch.ef10.ena_vi_count);
|
||||
}
|
||||
|
||||
/* Save WC memory mapping details */
|
||||
enp->en_u.hunt.enu_wc_mem_map_offset =
|
||||
enp->en_u.hunt.enu_uc_mem_map_offset +
|
||||
enp->en_u.hunt.enu_uc_mem_map_size;
|
||||
enp->en_arch.ef10.ena_wc_mem_map_offset =
|
||||
enp->en_arch.ef10.ena_uc_mem_map_offset +
|
||||
enp->en_arch.ef10.ena_uc_mem_map_size;
|
||||
|
||||
enp->en_u.hunt.enu_wc_mem_map_size =
|
||||
enp->en_arch.ef10.ena_wc_mem_map_size =
|
||||
(ER_DZ_TX_PIOBUF_STEP *
|
||||
enp->en_u.hunt.enu_piobuf_count);
|
||||
enp->en_arch.ef10.ena_piobuf_count);
|
||||
|
||||
/* Link piobufs to extra VIs in WC mapping */
|
||||
if (enp->en_u.hunt.enu_piobuf_count > 0) {
|
||||
for (i = 0; i < enp->en_u.hunt.enu_piobuf_count; i++) {
|
||||
if (enp->en_arch.ef10.ena_piobuf_count > 0) {
|
||||
for (i = 0; i < enp->en_arch.ef10.ena_piobuf_count; i++) {
|
||||
rc = efx_mcdi_link_piobuf(enp,
|
||||
enp->en_u.hunt.enu_pio_write_vi_base + i,
|
||||
enp->en_u.hunt.enu_piobuf_handle[i]);
|
||||
enp->en_arch.ef10.ena_pio_write_vi_base + i,
|
||||
enp->en_arch.ef10.ena_piobuf_handle[i]);
|
||||
if (rc != 0)
|
||||
break;
|
||||
}
|
||||
@ -1715,7 +1719,7 @@ hunt_nic_get_vi_pool(
|
||||
* Report VIs that the client driver can use.
|
||||
* Do not include VIs used for PIO buffer writes.
|
||||
*/
|
||||
*vi_countp = enp->en_u.hunt.enu_pio_write_vi_base;
|
||||
*vi_countp = enp->en_arch.ef10.ena_pio_write_vi_base;
|
||||
|
||||
return (0);
|
||||
}
|
||||
@ -1739,14 +1743,14 @@ hunt_nic_get_bar_region(
|
||||
switch (region) {
|
||||
case EFX_REGION_VI:
|
||||
/* UC mapped memory BAR region for VI registers */
|
||||
*offsetp = enp->en_u.hunt.enu_uc_mem_map_offset;
|
||||
*sizep = enp->en_u.hunt.enu_uc_mem_map_size;
|
||||
*offsetp = enp->en_arch.ef10.ena_uc_mem_map_offset;
|
||||
*sizep = enp->en_arch.ef10.ena_uc_mem_map_size;
|
||||
break;
|
||||
|
||||
case EFX_REGION_PIO_WRITE_VI:
|
||||
/* WC mapped memory BAR region for piobuf writes */
|
||||
*offsetp = enp->en_u.hunt.enu_wc_mem_map_offset;
|
||||
*sizep = enp->en_u.hunt.enu_wc_mem_map_size;
|
||||
*offsetp = enp->en_arch.ef10.ena_wc_mem_map_offset;
|
||||
*sizep = enp->en_arch.ef10.ena_wc_mem_map_size;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1773,10 +1777,10 @@ hunt_nic_fini(
|
||||
enp->en_vport_id = 0;
|
||||
|
||||
/* Unlink piobufs from extra VIs in WC mapping */
|
||||
if (enp->en_u.hunt.enu_piobuf_count > 0) {
|
||||
for (i = 0; i < enp->en_u.hunt.enu_piobuf_count; i++) {
|
||||
if (enp->en_arch.ef10.ena_piobuf_count > 0) {
|
||||
for (i = 0; i < enp->en_arch.ef10.ena_piobuf_count; i++) {
|
||||
rc = efx_mcdi_unlink_piobuf(enp,
|
||||
enp->en_u.hunt.enu_pio_write_vi_base + i);
|
||||
enp->en_arch.ef10.ena_pio_write_vi_base + i);
|
||||
if (rc != 0)
|
||||
break;
|
||||
}
|
||||
@ -1785,7 +1789,7 @@ hunt_nic_fini(
|
||||
hunt_nic_free_piobufs(enp);
|
||||
|
||||
(void) efx_mcdi_free_vis(enp);
|
||||
enp->en_u.hunt.enu_vi_count = 0;
|
||||
enp->en_arch.ef10.ena_vi_count = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -489,7 +489,7 @@ efx_nvram_tlv_validate(
|
||||
int pos;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFX_STATIC_ASSERT(sizeof (*header) <= HUNTINGTON_NVRAM_CHUNK);
|
||||
EFX_STATIC_ASSERT(sizeof (*header) <= EF10_NVRAM_CHUNK);
|
||||
|
||||
if ((partn_data == NULL) || (partn_size == 0)) {
|
||||
rc = EINVAL;
|
||||
@ -578,7 +578,7 @@ efx_nvram_tlv_validate(
|
||||
* beyond the first to be read.
|
||||
*/
|
||||
static __checkReturn efx_rc_t
|
||||
hunt_nvram_read_tlv_segment(
|
||||
ef10_nvram_read_tlv_segment(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in size_t seg_offset,
|
||||
@ -593,7 +593,7 @@ hunt_nvram_read_tlv_segment(
|
||||
int pos;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFX_STATIC_ASSERT(sizeof (*header) <= HUNTINGTON_NVRAM_CHUNK);
|
||||
EFX_STATIC_ASSERT(sizeof (*header) <= EF10_NVRAM_CHUNK);
|
||||
|
||||
if ((seg_data == NULL) || (max_seg_size == 0)) {
|
||||
rc = EINVAL;
|
||||
@ -601,8 +601,8 @@ hunt_nvram_read_tlv_segment(
|
||||
}
|
||||
|
||||
/* Read initial chunk of the segment, starting at offset */
|
||||
if ((rc = hunt_nvram_partn_read(enp, partn, seg_offset, seg_data,
|
||||
HUNTINGTON_NVRAM_CHUNK)) != 0) {
|
||||
if ((rc = ef10_nvram_partn_read(enp, partn, seg_offset, seg_data,
|
||||
EF10_NVRAM_CHUNK)) != 0) {
|
||||
goto fail2;
|
||||
}
|
||||
|
||||
@ -626,11 +626,11 @@ hunt_nvram_read_tlv_segment(
|
||||
}
|
||||
|
||||
/* Read the remaining segment content */
|
||||
if (total_length > HUNTINGTON_NVRAM_CHUNK) {
|
||||
if ((rc = hunt_nvram_partn_read(enp, partn,
|
||||
seg_offset + HUNTINGTON_NVRAM_CHUNK,
|
||||
seg_data + HUNTINGTON_NVRAM_CHUNK,
|
||||
total_length - HUNTINGTON_NVRAM_CHUNK)) != 0)
|
||||
if (total_length > EF10_NVRAM_CHUNK) {
|
||||
if ((rc = ef10_nvram_partn_read(enp, partn,
|
||||
seg_offset + EF10_NVRAM_CHUNK,
|
||||
seg_data + EF10_NVRAM_CHUNK,
|
||||
total_length - EF10_NVRAM_CHUNK)) != 0)
|
||||
goto fail6;
|
||||
}
|
||||
|
||||
@ -705,7 +705,7 @@ hunt_nvram_read_tlv_segment(
|
||||
* buffer containing a TLV formatted segment.
|
||||
*/
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_buf_read_tlv(
|
||||
ef10_nvram_buf_read_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(max_seg_size) caddr_t seg_data,
|
||||
__in size_t max_seg_size,
|
||||
@ -768,7 +768,7 @@ hunt_nvram_buf_read_tlv(
|
||||
|
||||
/* Read a single TLV item from the first segment in a TLV formatted partition */
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_read_tlv(
|
||||
ef10_nvram_partn_read_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in uint32_t tag,
|
||||
@ -783,7 +783,7 @@ hunt_nvram_partn_read_tlv(
|
||||
efx_rc_t rc;
|
||||
|
||||
/* Allocate sufficient memory for the entire partition */
|
||||
if ((rc = hunt_nvram_partn_size(enp, partn, &partn_size)) != 0)
|
||||
if ((rc = ef10_nvram_partn_size(enp, partn, &partn_size)) != 0)
|
||||
goto fail1;
|
||||
|
||||
if (partn_size == 0) {
|
||||
@ -807,7 +807,7 @@ hunt_nvram_partn_read_tlv(
|
||||
*/
|
||||
retry = 10;
|
||||
do {
|
||||
rc = hunt_nvram_read_tlv_segment(enp, partn, 0,
|
||||
rc = ef10_nvram_read_tlv_segment(enp, partn, 0,
|
||||
seg_data, partn_size);
|
||||
} while ((rc == EAGAIN) && (--retry > 0));
|
||||
|
||||
@ -816,7 +816,7 @@ hunt_nvram_partn_read_tlv(
|
||||
goto fail4;
|
||||
}
|
||||
|
||||
if ((rc = hunt_nvram_buf_read_tlv(enp, seg_data, partn_size,
|
||||
if ((rc = ef10_nvram_buf_read_tlv(enp, seg_data, partn_size,
|
||||
tag, &data, &length)) != 0)
|
||||
goto fail5;
|
||||
|
||||
@ -845,7 +845,7 @@ hunt_nvram_partn_read_tlv(
|
||||
|
||||
/* Compute the size of a segment. */
|
||||
static __checkReturn efx_rc_t
|
||||
hunt_nvram_buf_segment_size(
|
||||
ef10_nvram_buf_segment_size(
|
||||
__in caddr_t seg_data,
|
||||
__in size_t max_seg_size,
|
||||
__out size_t *seg_sizep)
|
||||
@ -976,7 +976,7 @@ hunt_nvram_buf_segment_size(
|
||||
* formatted segment. Historically partitions consisted of only one segment.
|
||||
*/
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_buf_write_tlv(
|
||||
ef10_nvram_buf_write_tlv(
|
||||
__inout_bcount(max_seg_size) caddr_t seg_data,
|
||||
__in size_t max_seg_size,
|
||||
__in uint32_t tag,
|
||||
@ -1077,14 +1077,14 @@ hunt_nvram_buf_write_tlv(
|
||||
* configuration.
|
||||
*/
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_write_tlv(
|
||||
ef10_nvram_partn_write_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in uint32_t tag,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size)
|
||||
{
|
||||
return hunt_nvram_partn_write_segment_tlv(enp, partn, tag, data,
|
||||
return ef10_nvram_partn_write_segment_tlv(enp, partn, tag, data,
|
||||
size, B_FALSE);
|
||||
}
|
||||
|
||||
@ -1093,7 +1093,7 @@ hunt_nvram_partn_write_tlv(
|
||||
* and optionally write a new tag to it.
|
||||
*/
|
||||
static __checkReturn efx_rc_t
|
||||
hunt_nvram_segment_write_tlv(
|
||||
ef10_nvram_segment_write_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in uint32_t tag,
|
||||
@ -1116,19 +1116,19 @@ hunt_nvram_segment_write_tlv(
|
||||
* this is the first segment in a partition. In this case the caller
|
||||
* must propogate the error.
|
||||
*/
|
||||
status = hunt_nvram_read_tlv_segment(enp, partn, *partn_offsetp,
|
||||
status = ef10_nvram_read_tlv_segment(enp, partn, *partn_offsetp,
|
||||
*seg_datap, *src_remain_lenp);
|
||||
if (status != 0)
|
||||
return (EINVAL);
|
||||
|
||||
status = hunt_nvram_buf_segment_size(*seg_datap,
|
||||
status = ef10_nvram_buf_segment_size(*seg_datap,
|
||||
*src_remain_lenp, &original_segment_size);
|
||||
if (status != 0)
|
||||
return (EINVAL);
|
||||
|
||||
if (write) {
|
||||
/* Update the contents of the segment in the buffer */
|
||||
if ((rc = hunt_nvram_buf_write_tlv(*seg_datap,
|
||||
if ((rc = ef10_nvram_buf_write_tlv(*seg_datap,
|
||||
*dest_remain_lenp, tag, data, size,
|
||||
&modified_segment_size)) != 0)
|
||||
goto fail1;
|
||||
@ -1176,7 +1176,7 @@ hunt_nvram_segment_write_tlv(
|
||||
* invalidate them.
|
||||
*/
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_write_segment_tlv(
|
||||
ef10_nvram_partn_write_segment_tlv(
|
||||
__in efx_nic_t *enp,
|
||||
__in uint32_t partn,
|
||||
__in uint32_t tag,
|
||||
@ -1196,7 +1196,7 @@ hunt_nvram_partn_write_segment_tlv(
|
||||
EFSYS_ASSERT3U(partn, ==, NVRAM_PARTITION_TYPE_DYNAMIC_CONFIG);
|
||||
|
||||
/* Allocate sufficient memory for the entire partition */
|
||||
if ((rc = hunt_nvram_partn_size(enp, partn, &partn_size)) != 0)
|
||||
if ((rc = ef10_nvram_partn_size(enp, partn, &partn_size)) != 0)
|
||||
goto fail1;
|
||||
|
||||
EFSYS_KMEM_ALLOC(enp->en_esip, partn_size, partn_data);
|
||||
@ -1210,14 +1210,14 @@ hunt_nvram_partn_write_segment_tlv(
|
||||
segment_data = partn_data;
|
||||
|
||||
/* Lock the partition */
|
||||
if ((rc = hunt_nvram_partn_lock(enp, partn)) != 0)
|
||||
if ((rc = ef10_nvram_partn_lock(enp, partn)) != 0)
|
||||
goto fail3;
|
||||
|
||||
/* Iterate over each (potential) segment to update it. */
|
||||
do {
|
||||
boolean_t write = all_segments || current_offset == 0;
|
||||
|
||||
rc = hunt_nvram_segment_write_tlv(enp, partn, tag, data, size,
|
||||
rc = ef10_nvram_segment_write_tlv(enp, partn, tag, data, size,
|
||||
&segment_data, ¤t_offset, &remaining_original_length,
|
||||
&remaining_modified_length, write);
|
||||
if (rc != 0) {
|
||||
@ -1236,7 +1236,7 @@ hunt_nvram_partn_write_segment_tlv(
|
||||
|
||||
/*
|
||||
* We've run out of space. This should actually be dealt with by
|
||||
* hunt_nvram_buf_write_tlv returning ENOSPC.
|
||||
* ef10_nvram_buf_write_tlv returning ENOSPC.
|
||||
*/
|
||||
if (total_length > partn_size) {
|
||||
rc = ENOSPC;
|
||||
@ -1244,16 +1244,16 @@ hunt_nvram_partn_write_segment_tlv(
|
||||
}
|
||||
|
||||
/* Erase the whole partition in NVRAM */
|
||||
if ((rc = hunt_nvram_partn_erase(enp, partn, 0, partn_size)) != 0)
|
||||
if ((rc = ef10_nvram_partn_erase(enp, partn, 0, partn_size)) != 0)
|
||||
goto fail6;
|
||||
|
||||
/* Write new partition contents from the buffer to NVRAM */
|
||||
if ((rc = hunt_nvram_partn_write(enp, partn, 0, partn_data,
|
||||
if ((rc = ef10_nvram_partn_write(enp, partn, 0, partn_data,
|
||||
total_length)) != 0)
|
||||
goto fail7;
|
||||
|
||||
/* Unlock the partition */
|
||||
hunt_nvram_partn_unlock(enp, partn);
|
||||
ef10_nvram_partn_unlock(enp, partn);
|
||||
|
||||
EFSYS_KMEM_FREE(enp->en_esip, partn_size, partn_data);
|
||||
|
||||
@ -1268,7 +1268,7 @@ hunt_nvram_partn_write_segment_tlv(
|
||||
fail4:
|
||||
EFSYS_PROBE(fail4);
|
||||
|
||||
hunt_nvram_partn_unlock(enp, partn);
|
||||
ef10_nvram_partn_unlock(enp, partn);
|
||||
fail3:
|
||||
EFSYS_PROBE(fail3);
|
||||
|
||||
@ -1286,7 +1286,7 @@ hunt_nvram_partn_write_segment_tlv(
|
||||
* not the data used by the segments in the partition.
|
||||
*/
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_size(
|
||||
ef10_nvram_partn_size(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__out size_t *sizep)
|
||||
@ -1306,7 +1306,7 @@ hunt_nvram_partn_size(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_lock(
|
||||
ef10_nvram_partn_lock(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn)
|
||||
{
|
||||
@ -1324,7 +1324,7 @@ hunt_nvram_partn_lock(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_read(
|
||||
ef10_nvram_partn_read(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in unsigned int offset,
|
||||
@ -1335,7 +1335,7 @@ hunt_nvram_partn_read(
|
||||
efx_rc_t rc;
|
||||
|
||||
while (size > 0) {
|
||||
chunk = MIN(size, HUNTINGTON_NVRAM_CHUNK);
|
||||
chunk = MIN(size, EF10_NVRAM_CHUNK);
|
||||
|
||||
if ((rc = efx_mcdi_nvram_read(enp, partn, offset,
|
||||
data, chunk)) != 0) {
|
||||
@ -1356,7 +1356,7 @@ hunt_nvram_partn_read(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_erase(
|
||||
ef10_nvram_partn_erase(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in unsigned int offset,
|
||||
@ -1401,7 +1401,7 @@ hunt_nvram_partn_erase(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_write(
|
||||
ef10_nvram_partn_write(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in unsigned int offset,
|
||||
@ -1426,7 +1426,7 @@ hunt_nvram_partn_write(
|
||||
goto fail2;
|
||||
}
|
||||
} else {
|
||||
write_size = HUNTINGTON_NVRAM_CHUNK;
|
||||
write_size = EF10_NVRAM_CHUNK;
|
||||
}
|
||||
|
||||
while (size > 0) {
|
||||
@ -1455,7 +1455,7 @@ hunt_nvram_partn_write(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_nvram_partn_unlock(
|
||||
ef10_nvram_partn_unlock(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn)
|
||||
{
|
||||
@ -1473,7 +1473,7 @@ hunt_nvram_partn_unlock(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_partn_set_version(
|
||||
ef10_nvram_partn_set_version(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int partn,
|
||||
__in_ecount(4) uint16_t version[4])
|
||||
@ -1491,7 +1491,7 @@ hunt_nvram_partn_set_version(
|
||||
size = sizeof (partn_version) - (2 * sizeof (uint32_t));
|
||||
|
||||
/* Write the version number to all segments in the partition */
|
||||
if ((rc = hunt_nvram_partn_write_segment_tlv(enp,
|
||||
if ((rc = ef10_nvram_partn_write_segment_tlv(enp,
|
||||
NVRAM_PARTITION_TYPE_DYNAMIC_CONFIG,
|
||||
TLV_TAG_PARTITION_VERSION(partn),
|
||||
(caddr_t)&partn_version.version_w, size, B_TRUE)) != 0)
|
||||
@ -1509,14 +1509,16 @@ hunt_nvram_partn_set_version(
|
||||
|
||||
#if EFSYS_OPT_NVRAM
|
||||
|
||||
typedef struct hunt_parttbl_entry_s {
|
||||
/* FIXME: Update partition table for Medford */
|
||||
|
||||
typedef struct ef10_parttbl_entry_s {
|
||||
unsigned int partn;
|
||||
unsigned int port;
|
||||
efx_nvram_type_t nvtype;
|
||||
} hunt_parttbl_entry_t;
|
||||
} ef10_parttbl_entry_t;
|
||||
|
||||
/* Translate EFX NVRAM types to firmware partition types */
|
||||
static hunt_parttbl_entry_t hunt_parttbl[] = {
|
||||
static ef10_parttbl_entry_t ef10_parttbl[] = {
|
||||
{NVRAM_PARTITION_TYPE_MC_FIRMWARE, 1, EFX_NVRAM_MC_FIRMWARE},
|
||||
{NVRAM_PARTITION_TYPE_MC_FIRMWARE, 2, EFX_NVRAM_MC_FIRMWARE},
|
||||
{NVRAM_PARTITION_TYPE_MC_FIRMWARE, 3, EFX_NVRAM_MC_FIRMWARE},
|
||||
@ -1547,19 +1549,19 @@ static hunt_parttbl_entry_t hunt_parttbl[] = {
|
||||
{NVRAM_PARTITION_TYPE_FPGA_BACKUP, 4, EFX_NVRAM_FPGA_BACKUP}
|
||||
};
|
||||
|
||||
static __checkReturn hunt_parttbl_entry_t *
|
||||
hunt_parttbl_entry(
|
||||
static __checkReturn ef10_parttbl_entry_t *
|
||||
ef10_parttbl_entry(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type)
|
||||
{
|
||||
efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip);
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
int i;
|
||||
|
||||
EFSYS_ASSERT3U(type, <, EFX_NVRAM_NTYPES);
|
||||
|
||||
for (i = 0; i < EFX_ARRAY_SIZE(hunt_parttbl); i++) {
|
||||
entry = &hunt_parttbl[i];
|
||||
for (i = 0; i < EFX_ARRAY_SIZE(ef10_parttbl); i++) {
|
||||
entry = &ef10_parttbl[i];
|
||||
|
||||
if (entry->port == emip->emi_port && entry->nvtype == type)
|
||||
return (entry);
|
||||
@ -1572,11 +1574,11 @@ hunt_parttbl_entry(
|
||||
#if EFSYS_OPT_DIAG
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_test(
|
||||
ef10_nvram_test(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
efx_mcdi_iface_t *emip = &(enp->en_mcdi.em_emip);
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
unsigned int npartns = 0;
|
||||
uint32_t *partns = NULL;
|
||||
size_t size;
|
||||
@ -1601,8 +1603,8 @@ hunt_nvram_test(
|
||||
* Iterate over the list of supported partition types
|
||||
* applicable to *this* port
|
||||
*/
|
||||
for (i = 0; i < EFX_ARRAY_SIZE(hunt_parttbl); i++) {
|
||||
entry = &hunt_parttbl[i];
|
||||
for (i = 0; i < EFX_ARRAY_SIZE(ef10_parttbl); i++) {
|
||||
entry = &ef10_parttbl[i];
|
||||
|
||||
if (entry->port != emip->emi_port)
|
||||
continue;
|
||||
@ -1632,22 +1634,22 @@ hunt_nvram_test(
|
||||
#endif /* EFSYS_OPT_DIAG */
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_size(
|
||||
ef10_nvram_size(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__out size_t *sizep)
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
uint32_t partn;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) == NULL) {
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) == NULL) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
partn = entry->partn;
|
||||
|
||||
if ((rc = hunt_nvram_partn_size(enp, partn, sizep)) != 0)
|
||||
if ((rc = ef10_nvram_partn_size(enp, partn, sizep)) != 0)
|
||||
goto fail2;
|
||||
|
||||
return (0);
|
||||
@ -1663,17 +1665,17 @@ hunt_nvram_size(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_get_version(
|
||||
ef10_nvram_get_version(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__out uint32_t *subtypep,
|
||||
__out_ecount(4) uint16_t version[4])
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
uint32_t partn;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) == NULL) {
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) == NULL) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
@ -1697,26 +1699,26 @@ hunt_nvram_get_version(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_rw_start(
|
||||
ef10_nvram_rw_start(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__out size_t *chunk_sizep)
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
uint32_t partn;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) == NULL) {
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) == NULL) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
partn = entry->partn;
|
||||
|
||||
if ((rc = hunt_nvram_partn_lock(enp, partn)) != 0)
|
||||
if ((rc = ef10_nvram_partn_lock(enp, partn)) != 0)
|
||||
goto fail2;
|
||||
|
||||
if (chunk_sizep != NULL)
|
||||
*chunk_sizep = HUNTINGTON_NVRAM_CHUNK;
|
||||
*chunk_sizep = EF10_NVRAM_CHUNK;
|
||||
|
||||
return (0);
|
||||
|
||||
@ -1729,22 +1731,22 @@ hunt_nvram_rw_start(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_read_chunk(
|
||||
ef10_nvram_read_chunk(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__in unsigned int offset,
|
||||
__out_bcount(size) caddr_t data,
|
||||
__in size_t size)
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) == NULL) {
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) == NULL) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
if ((rc = hunt_nvram_partn_read(enp, entry->partn,
|
||||
if ((rc = ef10_nvram_partn_read(enp, entry->partn,
|
||||
offset, data, size)) != 0)
|
||||
goto fail2;
|
||||
|
||||
@ -1759,23 +1761,23 @@ hunt_nvram_read_chunk(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_erase(
|
||||
ef10_nvram_erase(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type)
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
size_t size;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) == NULL) {
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) == NULL) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
if ((rc = hunt_nvram_partn_size(enp, entry->partn, &size)) != 0)
|
||||
if ((rc = ef10_nvram_partn_size(enp, entry->partn, &size)) != 0)
|
||||
goto fail2;
|
||||
|
||||
if ((rc = hunt_nvram_partn_erase(enp, entry->partn, 0, size)) != 0)
|
||||
if ((rc = ef10_nvram_partn_erase(enp, entry->partn, 0, size)) != 0)
|
||||
goto fail3;
|
||||
|
||||
return (0);
|
||||
@ -1791,22 +1793,22 @@ hunt_nvram_erase(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_write_chunk(
|
||||
ef10_nvram_write_chunk(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__in unsigned int offset,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size)
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) == NULL) {
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) == NULL) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
if ((rc = hunt_nvram_partn_write(enp, entry->partn,
|
||||
if ((rc = ef10_nvram_partn_write(enp, entry->partn,
|
||||
offset, data, size)) != 0)
|
||||
goto fail2;
|
||||
|
||||
@ -1821,33 +1823,33 @@ hunt_nvram_write_chunk(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_nvram_rw_finish(
|
||||
ef10_nvram_rw_finish(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type)
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) != NULL)
|
||||
hunt_nvram_partn_unlock(enp, entry->partn);
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) != NULL)
|
||||
ef10_nvram_partn_unlock(enp, entry->partn);
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_nvram_set_version(
|
||||
ef10_nvram_set_version(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_nvram_type_t type,
|
||||
__in_ecount(4) uint16_t version[4])
|
||||
{
|
||||
hunt_parttbl_entry_t *entry;
|
||||
ef10_parttbl_entry_t *entry;
|
||||
unsigned int partn;
|
||||
efx_rc_t rc;
|
||||
|
||||
if ((entry = hunt_parttbl_entry(enp, type)) == NULL) {
|
||||
if ((entry = ef10_parttbl_entry(enp, type)) == NULL) {
|
||||
rc = ENOTSUP;
|
||||
goto fail1;
|
||||
}
|
||||
partn = entry->partn;
|
||||
|
||||
if ((rc = hunt_nvram_partn_set_version(enp, partn, version)) != 0)
|
||||
if ((rc = ef10_nvram_partn_set_version(enp, partn, version)) != 0)
|
||||
goto fail2;
|
||||
|
||||
return (0);
|
||||
|
@ -182,7 +182,7 @@ efx_mcdi_rss_context_alloc(
|
||||
}
|
||||
|
||||
rss_context = MCDI_OUT_DWORD(req, RSS_CONTEXT_ALLOC_OUT_RSS_CONTEXT_ID);
|
||||
if (rss_context == HUNTINGTON_RSS_CONTEXT_INVALID) {
|
||||
if (rss_context == EF10_RSS_CONTEXT_INVALID) {
|
||||
rc = ENOENT;
|
||||
goto fail3;
|
||||
}
|
||||
@ -213,7 +213,7 @@ efx_mcdi_rss_context_free(
|
||||
MC_CMD_RSS_CONTEXT_FREE_OUT_LEN)];
|
||||
efx_rc_t rc;
|
||||
|
||||
if (rss_context == HUNTINGTON_RSS_CONTEXT_INVALID) {
|
||||
if (rss_context == EF10_RSS_CONTEXT_INVALID) {
|
||||
rc = EINVAL;
|
||||
goto fail1;
|
||||
}
|
||||
@ -257,7 +257,7 @@ efx_mcdi_rss_context_set_flags(
|
||||
MC_CMD_RSS_CONTEXT_SET_FLAGS_OUT_LEN)];
|
||||
efx_rc_t rc;
|
||||
|
||||
if (rss_context == HUNTINGTON_RSS_CONTEXT_INVALID) {
|
||||
if (rss_context == EF10_RSS_CONTEXT_INVALID) {
|
||||
rc = EINVAL;
|
||||
goto fail1;
|
||||
}
|
||||
@ -313,7 +313,7 @@ efx_mcdi_rss_context_set_key(
|
||||
MC_CMD_RSS_CONTEXT_SET_KEY_OUT_LEN)];
|
||||
efx_rc_t rc;
|
||||
|
||||
if (rss_context == HUNTINGTON_RSS_CONTEXT_INVALID) {
|
||||
if (rss_context == EF10_RSS_CONTEXT_INVALID) {
|
||||
rc = EINVAL;
|
||||
goto fail1;
|
||||
}
|
||||
@ -371,7 +371,7 @@ efx_mcdi_rss_context_set_table(
|
||||
uint8_t *req_table;
|
||||
int i, rc;
|
||||
|
||||
if (rss_context == HUNTINGTON_RSS_CONTEXT_INVALID) {
|
||||
if (rss_context == EF10_RSS_CONTEXT_INVALID) {
|
||||
rc = EINVAL;
|
||||
goto fail1;
|
||||
}
|
||||
@ -415,7 +415,7 @@ efx_mcdi_rss_context_set_table(
|
||||
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_init(
|
||||
ef10_rx_init(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
@ -444,7 +444,7 @@ hunt_rx_init(
|
||||
|
||||
#if EFSYS_OPT_RX_HDR_SPLIT
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_hdr_split_enable(
|
||||
ef10_rx_hdr_split_enable(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int hdr_buf_size,
|
||||
__in unsigned int pld_buf_size)
|
||||
@ -470,7 +470,7 @@ hunt_rx_hdr_split_enable(
|
||||
|
||||
#if EFSYS_OPT_RX_SCATTER
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_scatter_enable(
|
||||
ef10_rx_scatter_enable(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int buf_size)
|
||||
{
|
||||
@ -481,7 +481,7 @@ hunt_rx_scatter_enable(
|
||||
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_scale_mode_set(
|
||||
ef10_rx_scale_mode_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_rx_hash_alg_t alg,
|
||||
__in efx_rx_hash_type_t type,
|
||||
@ -521,7 +521,7 @@ hunt_rx_scale_mode_set(
|
||||
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_scale_key_set(
|
||||
ef10_rx_scale_key_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in_ecount(n) uint8_t *key,
|
||||
__in size_t n)
|
||||
@ -550,7 +550,7 @@ hunt_rx_scale_key_set(
|
||||
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_scale_tbl_set(
|
||||
ef10_rx_scale_tbl_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in_ecount(n) unsigned int *table,
|
||||
__in size_t n)
|
||||
@ -578,7 +578,7 @@ hunt_rx_scale_tbl_set(
|
||||
#endif /* EFSYS_OPT_RX_SCALE */
|
||||
|
||||
void
|
||||
hunt_rx_qpost(
|
||||
ef10_rx_qpost(
|
||||
__in efx_rxq_t *erp,
|
||||
__in_ecount(n) efsys_dma_addr_t *addrp,
|
||||
__in size_t size,
|
||||
@ -616,7 +616,7 @@ hunt_rx_qpost(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_rx_qpush(
|
||||
ef10_rx_qpush(
|
||||
__in efx_rxq_t *erp,
|
||||
__in unsigned int added,
|
||||
__inout unsigned int *pushedp)
|
||||
@ -647,7 +647,7 @@ hunt_rx_qpush(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_qflush(
|
||||
ef10_rx_qflush(
|
||||
__in efx_rxq_t *erp)
|
||||
{
|
||||
efx_nic_t *enp = erp->er_enp;
|
||||
@ -665,7 +665,7 @@ hunt_rx_qflush(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_rx_qenable(
|
||||
ef10_rx_qenable(
|
||||
__in efx_rxq_t *erp)
|
||||
{
|
||||
/* FIXME */
|
||||
@ -674,7 +674,7 @@ hunt_rx_qenable(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_rx_qcreate(
|
||||
ef10_rx_qcreate(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int index,
|
||||
__in unsigned int label,
|
||||
@ -727,7 +727,7 @@ hunt_rx_qcreate(
|
||||
erp->er_eep = eep;
|
||||
erp->er_label = label;
|
||||
|
||||
hunt_ev_rxlabel_init(eep, erp, label);
|
||||
ef10_ev_rxlabel_init(eep, erp, label);
|
||||
|
||||
return (0);
|
||||
|
||||
@ -742,14 +742,14 @@ hunt_rx_qcreate(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_rx_qdestroy(
|
||||
ef10_rx_qdestroy(
|
||||
__in efx_rxq_t *erp)
|
||||
{
|
||||
efx_nic_t *enp = erp->er_enp;
|
||||
efx_evq_t *eep = erp->er_eep;
|
||||
unsigned int label = erp->er_label;
|
||||
|
||||
hunt_ev_rxlabel_fini(eep, label);
|
||||
ef10_ev_rxlabel_fini(eep, label);
|
||||
|
||||
EFSYS_ASSERT(enp->en_rx_qcount != 0);
|
||||
--enp->en_rx_qcount;
|
||||
@ -758,7 +758,7 @@ hunt_rx_qdestroy(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_rx_fini(
|
||||
ef10_rx_fini(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
#if EFSYS_OPT_RX_SCALE
|
||||
|
@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$");
|
||||
#if EFSYS_OPT_DIAG
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_sram_test(
|
||||
ef10_sram_test(
|
||||
__in efx_nic_t *enp,
|
||||
__in efx_sram_pattern_fn_t func)
|
||||
{
|
||||
|
@ -165,7 +165,7 @@ efx_mcdi_fini_txq(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_init(
|
||||
ef10_tx_init(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
@ -173,14 +173,14 @@ hunt_tx_init(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_tx_fini(
|
||||
ef10_tx_fini(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
_NOTE(ARGUNUSED(enp))
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qcreate(
|
||||
ef10_tx_qcreate(
|
||||
__in efx_nic_t *enp,
|
||||
__in unsigned int index,
|
||||
__in unsigned int label,
|
||||
@ -218,7 +218,7 @@ hunt_tx_qcreate(
|
||||
(flags & EFX_TXQ_CKSUM_IPV4) ? 1 : 0);
|
||||
|
||||
EFSYS_MEM_WRITEQ(etp->et_esmp, 0, &desc);
|
||||
hunt_tx_qpush(etp, *addedp, 0);
|
||||
ef10_tx_qpush(etp, *addedp, 0);
|
||||
|
||||
return (0);
|
||||
|
||||
@ -229,7 +229,7 @@ hunt_tx_qcreate(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_tx_qdestroy(
|
||||
ef10_tx_qdestroy(
|
||||
__in efx_txq_t *etp)
|
||||
{
|
||||
/* FIXME */
|
||||
@ -238,7 +238,7 @@ hunt_tx_qdestroy(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qpio_enable(
|
||||
ef10_tx_qpio_enable(
|
||||
__in efx_txq_t *etp)
|
||||
{
|
||||
efx_nic_t *enp = etp->et_enp;
|
||||
@ -294,7 +294,7 @@ hunt_tx_qpio_enable(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_tx_qpio_disable(
|
||||
ef10_tx_qpio_disable(
|
||||
__in efx_txq_t *etp)
|
||||
{
|
||||
efx_nic_t *enp = etp->et_enp;
|
||||
@ -311,7 +311,7 @@ hunt_tx_qpio_disable(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qpio_write(
|
||||
ef10_tx_qpio_write(
|
||||
__in efx_txq_t *etp,
|
||||
__in_ecount(length) uint8_t *buffer,
|
||||
__in size_t length,
|
||||
@ -359,7 +359,7 @@ hunt_tx_qpio_write(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qpio_post(
|
||||
ef10_tx_qpio_post(
|
||||
__in efx_txq_t *etp,
|
||||
__in size_t pkt_length,
|
||||
__in unsigned int completed,
|
||||
@ -412,7 +412,7 @@ hunt_tx_qpio_post(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qpost(
|
||||
ef10_tx_qpost(
|
||||
__in efx_txq_t *etp,
|
||||
__in_ecount(n) efx_buffer_t *eb,
|
||||
__in unsigned int n,
|
||||
@ -474,7 +474,7 @@ hunt_tx_qpost(
|
||||
* hardware decides not to use the pushed descriptor.
|
||||
*/
|
||||
void
|
||||
hunt_tx_qpush(
|
||||
ef10_tx_qpush(
|
||||
__in efx_txq_t *etp,
|
||||
__in unsigned int added,
|
||||
__in unsigned int pushed)
|
||||
@ -504,7 +504,7 @@ hunt_tx_qpush(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qdesc_post(
|
||||
ef10_tx_qdesc_post(
|
||||
__in efx_txq_t *etp,
|
||||
__in_ecount(n) efx_desc_t *ed,
|
||||
__in unsigned int n,
|
||||
@ -546,7 +546,7 @@ hunt_tx_qdesc_post(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_tx_qdesc_dma_create(
|
||||
ef10_tx_qdesc_dma_create(
|
||||
__in efx_txq_t *etp,
|
||||
__in efsys_dma_addr_t addr,
|
||||
__in size_t size,
|
||||
@ -590,7 +590,7 @@ hunt_tx_qdesc_tso_create(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_tx_qdesc_vlantci_create(
|
||||
ef10_tx_qdesc_vlantci_create(
|
||||
__in efx_txq_t *etp,
|
||||
__in uint16_t tci,
|
||||
__out efx_desc_t *edp)
|
||||
@ -608,7 +608,7 @@ hunt_tx_qdesc_vlantci_create(
|
||||
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qpace(
|
||||
ef10_tx_qpace(
|
||||
__in efx_txq_t *etp,
|
||||
__in unsigned int ns)
|
||||
{
|
||||
@ -631,7 +631,7 @@ hunt_tx_qpace(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_tx_qflush(
|
||||
ef10_tx_qflush(
|
||||
__in efx_txq_t *etp)
|
||||
{
|
||||
efx_nic_t *enp = etp->et_enp;
|
||||
@ -649,7 +649,7 @@ hunt_tx_qflush(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_tx_qenable(
|
||||
ef10_tx_qenable(
|
||||
__in efx_txq_t *etp)
|
||||
{
|
||||
/* FIXME */
|
||||
@ -659,15 +659,10 @@ hunt_tx_qenable(
|
||||
|
||||
#if EFSYS_OPT_QSTATS
|
||||
void
|
||||
hunt_tx_qstats_update(
|
||||
ef10_tx_qstats_update(
|
||||
__in efx_txq_t *etp,
|
||||
__inout_ecount(TX_NQSTATS) efsys_stat_t *stat)
|
||||
{
|
||||
/*
|
||||
* TBD: Consider a common Siena/Huntington function. The code is
|
||||
* essentially identical.
|
||||
*/
|
||||
|
||||
unsigned int id;
|
||||
|
||||
for (id = 0; id < TX_NQSTATS; id++) {
|
||||
|
@ -45,7 +45,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "ef10_tlv_layout.h"
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_init(
|
||||
ef10_vpd_init(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
caddr_t svpd;
|
||||
@ -54,7 +54,8 @@ hunt_vpd_init(
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
pci_pf = enp->en_nic_cfg.enc_pf;
|
||||
/*
|
||||
@ -64,7 +65,7 @@ hunt_vpd_init(
|
||||
*/
|
||||
svpd = NULL;
|
||||
svpd_size = 0;
|
||||
rc = hunt_nvram_partn_read_tlv(enp,
|
||||
rc = ef10_nvram_partn_read_tlv(enp,
|
||||
NVRAM_PARTITION_TYPE_STATIC_CONFIG,
|
||||
TLV_TAG_PF_STATIC_VPD(pci_pf),
|
||||
&svpd, &svpd_size);
|
||||
@ -81,8 +82,8 @@ hunt_vpd_init(
|
||||
goto fail2;
|
||||
}
|
||||
|
||||
enp->en_u.hunt.enu_svpd = svpd;
|
||||
enp->en_u.hunt.enu_svpd_length = svpd_size;
|
||||
enp->en_arch.ef10.ena_svpd = svpd;
|
||||
enp->en_arch.ef10.ena_svpd_length = svpd_size;
|
||||
|
||||
out:
|
||||
return (0);
|
||||
@ -98,13 +99,14 @@ hunt_vpd_init(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_size(
|
||||
ef10_vpd_size(
|
||||
__in efx_nic_t *enp,
|
||||
__out size_t *sizep)
|
||||
{
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
/*
|
||||
* This function returns the total size the user should allocate
|
||||
@ -125,7 +127,7 @@ hunt_vpd_size(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_read(
|
||||
ef10_vpd_read(
|
||||
__in efx_nic_t *enp,
|
||||
__out_bcount(size) caddr_t data,
|
||||
__in size_t size)
|
||||
@ -135,11 +137,12 @@ hunt_vpd_read(
|
||||
uint32_t pci_pf;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
pci_pf = enp->en_nic_cfg.enc_pf;
|
||||
|
||||
if ((rc = hunt_nvram_partn_read_tlv(enp,
|
||||
if ((rc = ef10_nvram_partn_read_tlv(enp,
|
||||
NVRAM_PARTITION_TYPE_DYNAMIC_CONFIG,
|
||||
TLV_TAG_PF_DYNAMIC_VPD(pci_pf),
|
||||
&dvpd, &dvpd_size)) != 0)
|
||||
@ -169,7 +172,7 @@ hunt_vpd_read(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_verify(
|
||||
ef10_vpd_verify(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size)
|
||||
@ -182,12 +185,13 @@ hunt_vpd_verify(
|
||||
unsigned int dcont;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
/*
|
||||
* Strictly you could take the view that dynamic vpd is optional.
|
||||
* Instead, to conform more closely to the read/verify/reinit()
|
||||
* paradigm, we require dynamic vpd. hunt_vpd_reinit() will
|
||||
* paradigm, we require dynamic vpd. ef10_vpd_reinit() will
|
||||
* reinitialize it as required.
|
||||
*/
|
||||
if ((rc = efx_vpd_hunk_verify(data, size, NULL)) != 0)
|
||||
@ -197,7 +201,7 @@ hunt_vpd_verify(
|
||||
* Verify that there is no duplication between the static and
|
||||
* dynamic cfg sectors.
|
||||
*/
|
||||
if (enp->en_u.hunt.enu_svpd_length == 0)
|
||||
if (enp->en_arch.ef10.ena_svpd_length == 0)
|
||||
goto done;
|
||||
|
||||
dcont = 0;
|
||||
@ -213,8 +217,8 @@ hunt_vpd_verify(
|
||||
_NOTE(CONSTANTCONDITION)
|
||||
while (1) {
|
||||
if ((rc = efx_vpd_hunk_next(
|
||||
enp->en_u.hunt.enu_svpd,
|
||||
enp->en_u.hunt.enu_svpd_length, &stag, &skey,
|
||||
enp->en_arch.ef10.ena_svpd,
|
||||
enp->en_arch.ef10.ena_svpd_length, &stag, &skey,
|
||||
NULL, NULL, &scont)) != 0)
|
||||
goto fail3;
|
||||
if (scont == 0)
|
||||
@ -243,7 +247,7 @@ hunt_vpd_verify(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_reinit(
|
||||
ef10_vpd_reinit(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size)
|
||||
@ -254,14 +258,14 @@ hunt_vpd_reinit(
|
||||
/*
|
||||
* Only create an ID string if the dynamic cfg doesn't have one
|
||||
*/
|
||||
if (enp->en_u.hunt.enu_svpd_length == 0)
|
||||
if (enp->en_arch.ef10.ena_svpd_length == 0)
|
||||
wantpid = B_TRUE;
|
||||
else {
|
||||
unsigned int offset;
|
||||
uint8_t length;
|
||||
|
||||
rc = efx_vpd_hunk_get(enp->en_u.hunt.enu_svpd,
|
||||
enp->en_u.hunt.enu_svpd_length,
|
||||
rc = efx_vpd_hunk_get(enp->en_arch.ef10.ena_svpd,
|
||||
enp->en_arch.ef10.ena_svpd_length,
|
||||
EFX_VPD_ID, 0, &offset, &length);
|
||||
if (rc == 0)
|
||||
wantpid = B_FALSE;
|
||||
@ -285,7 +289,7 @@ hunt_vpd_reinit(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_get(
|
||||
ef10_vpd_get(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size,
|
||||
@ -295,16 +299,17 @@ hunt_vpd_get(
|
||||
uint8_t length;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
/* Attempt to satisfy the request from svpd first */
|
||||
if (enp->en_u.hunt.enu_svpd_length > 0) {
|
||||
if ((rc = efx_vpd_hunk_get(enp->en_u.hunt.enu_svpd,
|
||||
enp->en_u.hunt.enu_svpd_length, evvp->evv_tag,
|
||||
if (enp->en_arch.ef10.ena_svpd_length > 0) {
|
||||
if ((rc = efx_vpd_hunk_get(enp->en_arch.ef10.ena_svpd,
|
||||
enp->en_arch.ef10.ena_svpd_length, evvp->evv_tag,
|
||||
evvp->evv_keyword, &offset, &length)) == 0) {
|
||||
evvp->evv_length = length;
|
||||
memcpy(evvp->evv_value,
|
||||
enp->en_u.hunt.enu_svpd + offset, length);
|
||||
enp->en_arch.ef10.ena_svpd + offset, length);
|
||||
return (0);
|
||||
} else if (rc != ENOENT)
|
||||
goto fail1;
|
||||
@ -329,7 +334,7 @@ hunt_vpd_get(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_set(
|
||||
ef10_vpd_set(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size,
|
||||
@ -337,15 +342,16 @@ hunt_vpd_set(
|
||||
{
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
/* If the provided (tag,keyword) exists in svpd, then it is readonly */
|
||||
if (enp->en_u.hunt.enu_svpd_length > 0) {
|
||||
if (enp->en_arch.ef10.ena_svpd_length > 0) {
|
||||
unsigned int offset;
|
||||
uint8_t length;
|
||||
|
||||
if ((rc = efx_vpd_hunk_get(enp->en_u.hunt.enu_svpd,
|
||||
enp->en_u.hunt.enu_svpd_length, evvp->evv_tag,
|
||||
if ((rc = efx_vpd_hunk_get(enp->en_arch.ef10.ena_svpd,
|
||||
enp->en_arch.ef10.ena_svpd_length, evvp->evv_tag,
|
||||
evvp->evv_keyword, &offset, &length)) == 0) {
|
||||
rc = EACCES;
|
||||
goto fail1;
|
||||
@ -366,7 +372,7 @@ hunt_vpd_set(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_next(
|
||||
ef10_vpd_next(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size,
|
||||
@ -379,7 +385,7 @@ hunt_vpd_next(
|
||||
}
|
||||
|
||||
__checkReturn efx_rc_t
|
||||
hunt_vpd_write(
|
||||
ef10_vpd_write(
|
||||
__in efx_nic_t *enp,
|
||||
__in_bcount(size) caddr_t data,
|
||||
__in size_t size)
|
||||
@ -388,7 +394,8 @@ hunt_vpd_write(
|
||||
uint32_t pci_pf;
|
||||
efx_rc_t rc;
|
||||
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
pci_pf = enp->en_nic_cfg.enc_pf;
|
||||
|
||||
@ -397,7 +404,7 @@ hunt_vpd_write(
|
||||
goto fail1;
|
||||
|
||||
/* Store new dynamic VPD in all segments in DYNAMIC_CONFIG partition */
|
||||
if ((rc = hunt_nvram_partn_write_segment_tlv(enp,
|
||||
if ((rc = ef10_nvram_partn_write_segment_tlv(enp,
|
||||
NVRAM_PARTITION_TYPE_DYNAMIC_CONFIG,
|
||||
TLV_TAG_PF_DYNAMIC_VPD(pci_pf),
|
||||
data, vpd_length, B_TRUE)) != 0) {
|
||||
@ -416,17 +423,18 @@ hunt_vpd_write(
|
||||
}
|
||||
|
||||
void
|
||||
hunt_vpd_fini(
|
||||
ef10_vpd_fini(
|
||||
__in efx_nic_t *enp)
|
||||
{
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
|
||||
EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
|
||||
enp->en_family == EFX_FAMILY_MEDFORD);
|
||||
|
||||
if (enp->en_u.hunt.enu_svpd_length > 0) {
|
||||
EFSYS_KMEM_FREE(enp->en_esip, enp->en_u.hunt.enu_svpd_length,
|
||||
enp->en_u.hunt.enu_svpd);
|
||||
if (enp->en_arch.ef10.ena_svpd_length > 0) {
|
||||
EFSYS_KMEM_FREE(enp->en_esip, enp->en_arch.ef10.ena_svpd_length,
|
||||
enp->en_arch.ef10.ena_svpd);
|
||||
|
||||
enp->en_u.hunt.enu_svpd = NULL;
|
||||
enp->en_u.hunt.enu_svpd_length = 0;
|
||||
enp->en_arch.ef10.ena_svpd = NULL;
|
||||
enp->en_arch.ef10.ena_svpd_length = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -477,6 +477,11 @@ mcdi_mon_cfg_build(
|
||||
case EFX_FAMILY_HUNTINGTON:
|
||||
encp->enc_mon_type = EFX_MON_SFC91X0;
|
||||
break;
|
||||
#endif
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
case EFX_FAMILY_MEDFORD:
|
||||
encp->enc_mon_type = EFX_MON_SFC92X0;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
rc = EINVAL;
|
||||
|
47
sys/dev/sfxge/common/medford_impl.h
Normal file
47
sys/dev/sfxge/common/medford_impl.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are
|
||||
* those of the authors and should not be interpreted as representing official
|
||||
* policies, either expressed or implied, of the FreeBSD Project.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_MEDFORD_IMPL_H
|
||||
#define _SYS_MEDFORD_IMPL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MEDFORD_PIOBUF_NBUFS (16)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_MEDFORD_IMPL_H */
|
46
sys/dev/sfxge/common/medford_nic.c
Normal file
46
sys/dev/sfxge/common/medford_nic.c
Normal file
@ -0,0 +1,46 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Solarflare Communications Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are
|
||||
* those of the authors and should not be interpreted as representing official
|
||||
* policies, either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "efsys.h"
|
||||
#include "efx.h"
|
||||
#include "efx_impl.h"
|
||||
#include "mcdi_mon.h"
|
||||
|
||||
#if EFSYS_OPT_MEDFORD
|
||||
|
||||
#include "ef10_tlv_layout.h"
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* EFSYS_OPT_MEDFORD */
|
@ -29,11 +29,16 @@ SRCS+= siena_mac.c siena_mcdi.c siena_nic.c siena_nvram.c siena_phy.c
|
||||
SRCS+= siena_sram.c siena_vpd.c
|
||||
SRCS+= siena_flash.h siena_impl.h
|
||||
|
||||
SRCS+= ef10_impl.h
|
||||
|
||||
SRCS+= hunt_ev.c hunt_intr.c hunt_mac.c hunt_mcdi.c hunt_nic.c
|
||||
SRCS+= hunt_nvram.c hunt_rx.c hunt_phy.c hunt_sram.c hunt_tx.c hunt_vpd.c
|
||||
SRCS+= hunt_filter.c
|
||||
SRCS+= hunt_impl.h
|
||||
|
||||
SRCS+= medford_nic.c
|
||||
SRCS+= medford_impl.h
|
||||
|
||||
# Extra debug checks
|
||||
#CFLAGS += -DDEBUG=1
|
||||
|
||||
|
@ -6,7 +6,7 @@ PROG= bhyvectl
|
||||
SRCS= bhyvectl.c
|
||||
PACKAGE= bhyve
|
||||
|
||||
MAN=
|
||||
MAN= bhyvectl.8
|
||||
|
||||
LIBADD= vmmapi util
|
||||
|
||||
|
97
usr.sbin/bhyvectl/bhyvectl.8
Normal file
97
usr.sbin/bhyvectl/bhyvectl.8
Normal file
@ -0,0 +1,97 @@
|
||||
.\" Copyright (c) 2015 Christian Brueffer
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd January 12, 2016
|
||||
.Dt BHYVECTL 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm bhyvectl
|
||||
.Nd "control utility for bhyve instances"
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Fl -vm= Ns Ar <vmname>
|
||||
.Op Fl -create
|
||||
.Op Fl -destroy
|
||||
.Op Fl -get-stats
|
||||
.Op Fl -inject-nmi
|
||||
.Op Fl -force-reset
|
||||
.Op Fl -force-poweroff
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
command is a control utility for active
|
||||
.Xr bhyve 8
|
||||
virtual machine instances.
|
||||
.Pp
|
||||
.Em Note :
|
||||
Most
|
||||
.Nm
|
||||
flags are intended for querying and setting the state of an active instance.
|
||||
These commands are intended for development purposes, and are not documented here.
|
||||
A complete list can be obtained by executing
|
||||
.Nm
|
||||
without any arguments.
|
||||
.Pp
|
||||
The user-facing options are as follows:
|
||||
.Bl -tag -width ".Fl d Ar argument"
|
||||
.It Fl -vm= Ns Ar <vmname>
|
||||
Operate on the virtual machine
|
||||
.Ar <vmname> .
|
||||
.It Fl -create
|
||||
Create the specified VM.
|
||||
.It Fl -destroy
|
||||
Destroy the specified VM.
|
||||
.It Fl -get-state
|
||||
Retrieve statistics for the specified VM.
|
||||
.It Fl -inject-nmi
|
||||
Inject a non-maskable interrupt (NMI) into the VM.
|
||||
.It Fl -force-reset
|
||||
Force the VM to reset.
|
||||
.It Fl -force-poweroff
|
||||
Force the VM to power off.
|
||||
.El
|
||||
.Sh EXIT STATUS
|
||||
.Ex -std
|
||||
.Sh EXAMPLES
|
||||
Destroy the VM called fbsd10:
|
||||
.Pp
|
||||
.Dl "bhyvectl --vm=fbsd10 --destroy"
|
||||
.Sh SEE ALSO
|
||||
.Xr bhyve 8 ,
|
||||
.Xr bhyveload 8
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
command first appeared in
|
||||
.Fx 10.1 .
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Nm
|
||||
utility was written by
|
||||
.An Peter Grehan
|
||||
and
|
||||
.An Neel Natu .
|
Loading…
Reference in New Issue
Block a user