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