Merge git://git.denx.de/u-boot-fsl-qoriq
[oweals/u-boot.git] / net / nfs.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * (C) Masami Komiya <mkomiya@sonare.it> 2004
4  */
5
6 #ifndef __NFS_H__
7 #define __NFS_H__
8
9 #define SUNRPC_PORT     111
10
11 #define PROG_PORTMAP    100000
12 #define PROG_NFS        100003
13 #define PROG_MOUNT      100005
14
15 #define MSG_CALL        0
16 #define MSG_REPLY       1
17
18 #define PORTMAP_GETPORT 3
19
20 #define MOUNT_ADDENTRY  1
21 #define MOUNT_UMOUNTALL 4
22
23 #define NFS_LOOKUP      4
24 #define NFS_READLINK    5
25 #define NFS_READ        6
26
27 #define NFS3PROC_LOOKUP 3
28
29 #define NFS_FHSIZE      32
30 #define NFS3_FHSIZE     64
31
32 #define NFSERR_PERM     1
33 #define NFSERR_NOENT    2
34 #define NFSERR_ACCES    13
35 #define NFSERR_ISDIR    21
36 #define NFSERR_INVAL    22
37
38 /*
39  * Block size used for NFS read accesses.  A RPC reply packet (including  all
40  * headers) must fit within a single Ethernet frame to avoid fragmentation.
41  * However, if CONFIG_IP_DEFRAG is set, a bigger value could be used.  In any
42  * case, most NFS servers are optimized for a power of 2.
43  */
44 #define NFS_READ_SIZE   1024    /* biggest power of two that fits Ether frame */
45 #define NFS_MAX_ATTRS   26
46
47 /* Values for Accept State flag on RPC answers (See: rfc1831) */
48 enum rpc_accept_stat {
49         NFS_RPC_SUCCESS = 0,    /* RPC executed successfully */
50         NFS_RPC_PROG_UNAVAIL = 1,       /* remote hasn't exported program */
51         NFS_RPC_PROG_MISMATCH = 2,      /* remote can't support version # */
52         NFS_RPC_PROC_UNAVAIL = 3,       /* program can't support procedure */
53         NFS_RPC_GARBAGE_ARGS = 4,       /* procedure can't decode params */
54         NFS_RPC_SYSTEM_ERR = 5  /* errors like memory allocation failure */
55 };
56
57 struct rpc_t {
58         union {
59                 uint8_t data[NFS_READ_SIZE + (6 + NFS_MAX_ATTRS) *
60                         sizeof(uint32_t)];
61                 struct {
62                         uint32_t id;
63                         uint32_t type;
64                         uint32_t rpcvers;
65                         uint32_t prog;
66                         uint32_t vers;
67                         uint32_t proc;
68                         uint32_t data[1];
69                 } call;
70                 struct {
71                         uint32_t id;
72                         uint32_t type;
73                         uint32_t rstatus;
74                         uint32_t verifier;
75                         uint32_t v2;
76                         uint32_t astatus;
77                         uint32_t data[NFS_READ_SIZE / sizeof(uint32_t) +
78                                 NFS_MAX_ATTRS];
79                 } reply;
80         } u;
81 } __attribute__((packed));
82 void nfs_start(void);   /* Begin NFS */
83
84
85 /**********************************************************************/
86
87 #endif /* __NFS_H__ */