|
|
1.1 ! root 1: /* ! 2: * Mach Operating System ! 3: * Copyright (c) 1993,1991,1990,1989,1988 Carnegie Mellon University ! 4: * All Rights Reserved. ! 5: * ! 6: * Permission to use, copy, modify and distribute this software and its ! 7: * documentation is hereby granted, provided that both the copyright ! 8: * notice and this permission notice appear in all copies of the ! 9: * software, derivative works or modified versions, and any portions ! 10: * thereof, and that both notices appear in supporting documentation. ! 11: * ! 12: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" ! 13: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ! 14: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ! 15: * ! 16: * Carnegie Mellon requests users of this software to return to ! 17: * ! 18: * Software Distribution Coordinator or [email protected] ! 19: * School of Computer Science ! 20: * Carnegie Mellon University ! 21: * Pittsburgh PA 15213-3890 ! 22: * ! 23: * any improvements or extensions that they make and grant Carnegie Mellon ! 24: * the rights to redistribute these changes. ! 25: */ ! 26: /* ! 27: * Random device subroutines and stubs. ! 28: */ ! 29: ! 30: #include <vm/vm_kern.h> ! 31: #include <device/buf.h> ! 32: #include <device/if_hdr.h> ! 33: #include <device/if_ether.h> ! 34: ! 35: ! 36: ! 37: /* ! 38: * Print out disk name and block number for hard disk errors. ! 39: */ ! 40: void harderr(bp, cp) ! 41: struct buf *bp; ! 42: char * cp; ! 43: { ! 44: printf("%s%d%c: hard error sn%d ", ! 45: cp, ! 46: minor(bp->b_dev) >> 3, ! 47: 'a' + (minor(bp->b_dev) & 0x7), ! 48: bp->b_blkno); ! 49: } ! 50: ! 51: /* ! 52: * Ethernet support routines. ! 53: */ ! 54: u_char etherbroadcastaddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; ! 55: ! 56: /* ! 57: * Convert Ethernet address to printable (loggable) representation. ! 58: */ ! 59: char * ! 60: ether_sprintf(ap) ! 61: register u_char *ap; ! 62: { ! 63: register i; ! 64: static char etherbuf[18]; ! 65: register char *cp = etherbuf; ! 66: static char digits[] = "0123456789abcdef"; ! 67: ! 68: for (i = 0; i < 6; i++) { ! 69: *cp++ = digits[*ap >> 4]; ! 70: *cp++ = digits[*ap++ & 0xf]; ! 71: *cp++ = ':'; ! 72: } ! 73: *--cp = 0; ! 74: return (etherbuf); ! 75: } ! 76: ! 77: /* ! 78: * Initialize send and receive queues on an interface. ! 79: */ ! 80: void if_init_queues(ifp) ! 81: register struct ifnet *ifp; ! 82: { ! 83: IFQ_INIT(&ifp->if_snd); ! 84: queue_init(&ifp->if_rcv_port_list); ! 85: simple_lock_init(&ifp->if_rcv_port_list_lock); ! 86: } ! 87: ! 88: ! 89: /* ! 90: * Compatibility with BSD device drivers. ! 91: */ ! 92: void sleep(channel, priority) ! 93: vm_offset_t channel; ! 94: int priority; ! 95: { ! 96: assert_wait((event_t) channel, FALSE); /* not interruptible XXX */ ! 97: thread_block((void (*)()) 0); ! 98: } ! 99: ! 100: void wakeup(channel) ! 101: vm_offset_t channel; ! 102: { ! 103: thread_wakeup((event_t) channel); ! 104: } ! 105: ! 106: struct buf * ! 107: geteblk(size) ! 108: int size; ! 109: { ! 110: register io_req_t ior; ! 111: ! 112: io_req_alloc(ior, 0); ! 113: ior->io_device = (device_t)0; ! 114: ior->io_unit = 0; ! 115: ior->io_op = 0; ! 116: ior->io_mode = 0; ! 117: ior->io_recnum = 0; ! 118: ior->io_count = size; ! 119: ior->io_residual = 0; ! 120: ior->io_error = 0; ! 121: ! 122: size = round_page(size); ! 123: ior->io_alloc_size = size; ! 124: if (kmem_alloc(kernel_map, (vm_offset_t *)&ior->io_data, size) ! 125: != KERN_SUCCESS) ! 126: panic("geteblk"); ! 127: ! 128: return (ior); ! 129: } ! 130: ! 131: void brelse(bp) ! 132: struct buf *bp; ! 133: { ! 134: register io_req_t ior = bp; ! 135: ! 136: (void) vm_deallocate(kernel_map, ! 137: (vm_offset_t) ior->io_data, ! 138: (vm_size_t) ior->io_alloc_size); ! 139: io_req_free(ior); ! 140: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.