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