1/****************************************************************************** 2 * Copyright (c) 2013 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/* 14 * libe1k Forth wrapper 15 */ 16 17#include <e1k.h> 18 19// : e1k-open ( baseaddr -- false | [ driver true ] ) 20PRIM(E1K_X2d_OPEN) 21{ 22 uint64_t baseaddr = TOS.u; POP; 23 net_driver_t *net_driver = e1k_open(baseaddr); 24 if (net_driver) { 25 PUSH; 26 TOS.u = (unsigned long)net_driver; PUSH; 27 TOS.n = -1; 28 } else { 29 PUSH; 30 TOS.n = 0; 31 } 32} 33MIRP 34 35// : e1k-close ( driver -- ) 36PRIM(E1K_X2d_CLOSE) 37{ 38 net_driver_t *driver = TOS.a; POP; 39 e1k_close(driver); 40} 41MIRP 42 43 44// : e1k-read ( addr len -- actual ) 45PRIM(E1K_X2d_READ) 46{ 47 int len = TOS.u; POP; 48 TOS.n = e1k_read(TOS.a, len); 49} 50MIRP 51 52// : e1k-write ( addr len -- actual ) 53PRIM(E1K_X2d_WRITE) 54{ 55 int len = TOS.u; POP; 56 TOS.n = e1k_write(TOS.a, len); 57} 58MIRP 59 60// : e1k-mac-setup ( vendor-id device-id baseaddr addr -- false | [ mac-addr len true ] ) 61PRIM(E1K_X2d_MAC_X2d_SETUP) 62{ 63 char *mac_addr = TOS.a; POP; 64 uint64_t baseaddr = TOS.u; POP; 65 unsigned int device_id = TOS.u; POP; 66 67 int ret = e1k_mac_setup(TOS.u, device_id, baseaddr, mac_addr); 68 if (!ret) { 69 TOS.a = mac_addr; PUSH; 70 TOS.n = 6; PUSH; 71 TOS.n = -1; 72 } else 73 TOS.n = 0; 74} 75MIRP 76