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 39cbd8a35cSwdenk /* Block size used for NFS read accesses. A RPC reply packet (including all 40cbd8a35cSwdenk * headers) must fit within a single Ethernet frame to avoid fragmentation. 41bd931ca6SAlessandro Rubini * However, if CONFIG_IP_DEFRAG is set, the config file may want to use a 42bd931ca6SAlessandro Rubini * bigger value. In any case, most NFS servers are optimized for a power of 2. 43bd931ca6SAlessandro Rubini */ 44bd931ca6SAlessandro Rubini #ifdef CONFIG_NFS_READ_SIZE 45bd931ca6SAlessandro Rubini #define NFS_READ_SIZE CONFIG_NFS_READ_SIZE 46bd931ca6SAlessandro Rubini #else 47bd931ca6SAlessandro Rubini #define NFS_READ_SIZE 1024 /* biggest power of two that fits Ether frame */ 48bd931ca6SAlessandro Rubini #endif 49cbd8a35cSwdenk 50b0baca98SGuillaume GARDET /* Values for Accept State flag on RPC answers (See: rfc1831) */ 51b0baca98SGuillaume GARDET enum rpc_accept_stat { 52b0baca98SGuillaume GARDET NFS_RPC_SUCCESS = 0, /* RPC executed successfully */ 53b0baca98SGuillaume GARDET NFS_RPC_PROG_UNAVAIL = 1, /* remote hasn't exported program */ 54b0baca98SGuillaume GARDET NFS_RPC_PROG_MISMATCH = 2, /* remote can't support version # */ 55b0baca98SGuillaume GARDET NFS_RPC_PROC_UNAVAIL = 3, /* program can't support procedure */ 56b0baca98SGuillaume GARDET NFS_RPC_GARBAGE_ARGS = 4, /* procedure can't decode params */ 57b0baca98SGuillaume GARDET NFS_RPC_SYSTEM_ERR = 5 /* errors like memory allocation failure */ 58b0baca98SGuillaume GARDET }; 59b0baca98SGuillaume GARDET 60cbd8a35cSwdenk struct rpc_t { 61cbd8a35cSwdenk union { 62cbd8a35cSwdenk uint8_t data[2048]; 63cbd8a35cSwdenk struct { 64cbd8a35cSwdenk uint32_t id; 65cbd8a35cSwdenk uint32_t type; 66cbd8a35cSwdenk uint32_t rpcvers; 67cbd8a35cSwdenk uint32_t prog; 68cbd8a35cSwdenk uint32_t vers; 69cbd8a35cSwdenk uint32_t proc; 70cbd8a35cSwdenk uint32_t data[1]; 71cbd8a35cSwdenk } call; 72cbd8a35cSwdenk struct { 73cbd8a35cSwdenk uint32_t id; 74cbd8a35cSwdenk uint32_t type; 75cbd8a35cSwdenk uint32_t rstatus; 76cbd8a35cSwdenk uint32_t verifier; 77cbd8a35cSwdenk uint32_t v2; 78cbd8a35cSwdenk uint32_t astatus; 7911e8ec96SJoe Hershberger uint32_t data[NFS_READ_SIZE]; 80cbd8a35cSwdenk } reply; 81cbd8a35cSwdenk } u; 82*704f3acfSDenis Pynkin } __attribute__((packed)); 8368c76a3aSJoe Hershberger void nfs_start(void); /* Begin NFS */ 84cbd8a35cSwdenk 85cbd8a35cSwdenk 86cbd8a35cSwdenk /**********************************************************************/ 87cbd8a35cSwdenk 88cbd8a35cSwdenk #endif /* __NFS_H__ */ 89