|
|
1.1 ! root 1: /****************************************************************************** ! 2: * Copyright (c) 2004, 2011 IBM Corporation ! 3: * All rights reserved. ! 4: * This program and the accompanying materials ! 5: * are made available under the terms of the BSD License ! 6: * which accompanies this distribution, and is available at ! 7: * http://www.opensource.org/licenses/bsd-license.php ! 8: * ! 9: * Contributors: ! 10: * IBM Corporation - initial implementation ! 11: *****************************************************************************/ ! 12: ! 13: #include "netdriver_int.h" ! 14: ! 15: extern snk_module_t snk_module_interface; ! 16: ! 17: snk_kernel_t *snk_kernel_interface = 0; ! 18: ! 19: extern int ! 20: check_driver( pci_config_t *pci_conf ); ! 21: ! 22: ! 23: static void* ! 24: memset( void *dest, int c, size_t n ) ! 25: { ! 26: while( n-- ) { ! 27: *( char * ) dest++ = ( char ) c; ! 28: } ! 29: return dest; ! 30: } ! 31: ! 32: ! 33: extern char __module_start[]; ! 34: extern char __module_end[]; ! 35: extern char __bss_start[]; ! 36: extern char __bss_end[]; ! 37: ! 38: snk_module_t* ! 39: module_init(snk_kernel_t *snk_kernel_int, pci_config_t *pciconf) ! 40: { ! 41: long module_size; ! 42: ! 43: module_size = __module_end - __module_start; ! 44: if (module_size >= 0x800000) { ! 45: snk_kernel_int->print("Module size (%llu bytes) is too big!\n", ! 46: module_size); ! 47: return 0; ! 48: } ! 49: ! 50: memset(__bss_start, 0, __bss_end - __bss_start); ! 51: ! 52: if (snk_kernel_int->version != snk_module_interface.version) { ! 53: return 0; ! 54: } ! 55: ! 56: snk_kernel_interface = snk_kernel_int; ! 57: ! 58: /* Check if this is the right driver */ ! 59: if (check_driver(pciconf) < 0) { ! 60: return 0; ! 61: } ! 62: ! 63: snk_module_interface.link_addr = module_init; ! 64: return &snk_module_interface; ! 65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.