18f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe/*
28f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe *    SE/HMC Drive FTP Services
38f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe *
48f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe *    Copyright IBM Corp. 2013
58f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe *    Author(s): Ralf Hoppe (rhoppe@de.ibm.com)
68f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe */
78f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe
88f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe#ifndef __HMCDRV_FTP_H__
98f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe#define __HMCDRV_FTP_H__
108f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe
118f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe#include <linux/types.h> /* size_t, loff_t */
128f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe
138f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe/*
148f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * HMC drive FTP Service max. length of path (w/ EOS)
158f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe */
168f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe#define HMCDRV_FTP_FIDENT_MAX 192
178f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe
188f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe/**
198f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * enum hmcdrv_ftp_cmdid - HMC drive FTP commands
208f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_NOOP: do nothing (only for probing)
218f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_GET: read a file
228f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_PUT: (over-) write a file
238f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_APPEND: append to a file
248f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_DIR: list directory long (ls -l)
258f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_NLIST: list files, no directories (name list)
268f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_DELETE: delete a file
278f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @HMCDRV_FTP_CANCEL: cancel operation (SCLP/LPAR only)
288f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe */
298f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppeenum hmcdrv_ftp_cmdid {
308f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_NOOP = 0,
318f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_GET = 1,
328f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_PUT = 2,
338f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_APPEND = 3,
348f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_DIR = 4,
358f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_NLIST = 5,
368f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_DELETE = 6,
378f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	HMCDRV_FTP_CANCEL = 7
388f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe};
398f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe
408f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe/**
418f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * struct hmcdrv_ftp_cmdspec - FTP command specification
428f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @id: FTP command ID
438f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @ofs: offset in file
448f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @fname: filename (ASCII), null-terminated
458f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @buf: kernel-space transfer data buffer, 4k aligned
468f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe * @len: (max) number of bytes to transfer from/to @buf
478f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe */
488f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppestruct hmcdrv_ftp_cmdspec {
498f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	enum hmcdrv_ftp_cmdid id;
508f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	loff_t ofs;
518f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	const char *fname;
528f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	void __kernel *buf;
538f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe	size_t len;
548f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe};
558f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe
568f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppeint hmcdrv_ftp_startup(void);
578f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppevoid hmcdrv_ftp_shutdown(void);
588f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppeint hmcdrv_ftp_probe(void);
598f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppessize_t hmcdrv_ftp_do(const struct hmcdrv_ftp_cmdspec *ftp);
608f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppessize_t hmcdrv_ftp_cmd(char __kernel *cmd, loff_t offset,
618f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe		       char __user *buf, size_t len);
628f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe
638f933b1043e1e51f4776fc1ffe86752c7785fd4eRalf Hoppe#endif	 /* __HMCDRV_FTP_H__ */
64