mtty.c 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Mediated virtual PCI serial host device driver
  4. *
  5. * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
  6. * Author: Neo Jia <cjia@nvidia.com>
  7. * Kirti Wankhede <kwankhede@nvidia.com>
  8. *
  9. * Sample driver that creates mdev device that simulates serial port over PCI
  10. * card.
  11. */
  12. #include <linux/init.h>
  13. #include <linux/module.h>
  14. #include <linux/kernel.h>
  15. #include <linux/fs.h>
  16. #include <linux/poll.h>
  17. #include <linux/slab.h>
  18. #include <linux/cdev.h>
  19. #include <linux/sched.h>
  20. #include <linux/wait.h>
  21. #include <linux/vfio.h>
  22. #include <linux/iommu.h>
  23. #include <linux/sysfs.h>
  24. #include <linux/ctype.h>
  25. #include <linux/file.h>
  26. #include <linux/mdev.h>
  27. #include <linux/pci.h>
  28. #include <linux/serial.h>
  29. #include <uapi/linux/serial_reg.h>
  30. #include <linux/eventfd.h>
  31. #include <linux/anon_inodes.h>
  32. /*
  33. * #defines
  34. */
  35. #define VERSION_STRING "0.1"
  36. #define DRIVER_AUTHOR "NVIDIA Corporation"
  37. #define MTTY_CLASS_NAME "mtty"
  38. #define MTTY_NAME "mtty"
  39. #define MTTY_STRING_LEN 16
  40. #define MTTY_CONFIG_SPACE_SIZE 0xff
  41. #define MTTY_IO_BAR_SIZE 0x8
  42. #define MTTY_MMIO_BAR_SIZE 0x100000
  43. #define STORE_LE16(addr, val) (*(u16 *)addr = val)
  44. #define STORE_LE32(addr, val) (*(u32 *)addr = val)
  45. #define MAX_FIFO_SIZE 16
  46. #define CIRCULAR_BUF_INC_IDX(idx) (idx = (idx + 1) & (MAX_FIFO_SIZE - 1))
  47. #define MTTY_VFIO_PCI_OFFSET_SHIFT 40
  48. #define MTTY_VFIO_PCI_OFFSET_TO_INDEX(off) (off >> MTTY_VFIO_PCI_OFFSET_SHIFT)
  49. #define MTTY_VFIO_PCI_INDEX_TO_OFFSET(index) \
  50. ((u64)(index) << MTTY_VFIO_PCI_OFFSET_SHIFT)
  51. #define MTTY_VFIO_PCI_OFFSET_MASK \
  52. (((u64)(1) << MTTY_VFIO_PCI_OFFSET_SHIFT) - 1)
  53. #define MAX_MTTYS 24
  54. /*
  55. * Global Structures
  56. */
  57. static struct mtty_dev {
  58. dev_t vd_devt;
  59. struct class *vd_class;
  60. struct cdev vd_cdev;
  61. struct idr vd_idr;
  62. struct device dev;
  63. struct mdev_parent parent;
  64. } mtty_dev;
  65. struct mdev_region_info {
  66. u64 start;
  67. u64 phys_start;
  68. u32 size;
  69. u64 vfio_offset;
  70. };
  71. #if defined(DEBUG_REGS)
  72. static const char *wr_reg[] = {
  73. "TX",
  74. "IER",
  75. "FCR",
  76. "LCR",
  77. "MCR",
  78. "LSR",
  79. "MSR",
  80. "SCR"
  81. };
  82. static const char *rd_reg[] = {
  83. "RX",
  84. "IER",
  85. "IIR",
  86. "LCR",
  87. "MCR",
  88. "LSR",
  89. "MSR",
  90. "SCR"
  91. };
  92. #endif
  93. /* loop back buffer */
  94. struct rxtx {
  95. u8 fifo[MAX_FIFO_SIZE];
  96. u8 head, tail;
  97. u8 count;
  98. };
  99. struct serial_port {
  100. u8 uart_reg[8]; /* 8 registers */
  101. struct rxtx rxtx; /* loop back buffer */
  102. bool dlab;
  103. bool overrun;
  104. u16 divisor;
  105. u8 fcr; /* FIFO control register */
  106. u8 max_fifo_size;
  107. u8 intr_trigger_level; /* interrupt trigger level */
  108. };
  109. struct mtty_data {
  110. u64 magic;
  111. #define MTTY_MAGIC 0x7e9d09898c3e2c4e /* Nothing clever, just random */
  112. u32 major_ver;
  113. #define MTTY_MAJOR_VER 1
  114. u32 minor_ver;
  115. #define MTTY_MINOR_VER 0
  116. u32 nr_ports;
  117. u32 flags;
  118. struct serial_port ports[2];
  119. };
  120. struct mdev_state;
  121. struct mtty_migration_file {
  122. struct file *filp;
  123. struct mutex lock;
  124. struct mdev_state *mdev_state;
  125. struct mtty_data data;
  126. ssize_t filled_size;
  127. u8 disabled:1;
  128. };
  129. /* State of each mdev device */
  130. struct mdev_state {
  131. struct vfio_device vdev;
  132. struct eventfd_ctx *intx_evtfd;
  133. struct eventfd_ctx *msi_evtfd;
  134. int irq_index;
  135. u8 *vconfig;
  136. struct mutex ops_lock;
  137. struct mdev_device *mdev;
  138. struct mdev_region_info region_info[VFIO_PCI_NUM_REGIONS];
  139. u32 bar_mask[VFIO_PCI_NUM_REGIONS];
  140. struct list_head next;
  141. struct serial_port s[2];
  142. struct mutex rxtx_lock;
  143. struct vfio_device_info dev_info;
  144. int nr_ports;
  145. enum vfio_device_mig_state state;
  146. struct mutex state_mutex;
  147. struct mutex reset_mutex;
  148. struct mtty_migration_file *saving_migf;
  149. struct mtty_migration_file *resuming_migf;
  150. u8 deferred_reset:1;
  151. u8 intx_mask:1;
  152. };
  153. static struct mtty_type {
  154. struct mdev_type type;
  155. int nr_ports;
  156. } mtty_types[2] = {
  157. { .nr_ports = 1, .type.sysfs_name = "1",
  158. .type.pretty_name = "Single port serial" },
  159. { .nr_ports = 2, .type.sysfs_name = "2",
  160. .type.pretty_name = "Dual port serial" },
  161. };
  162. static struct mdev_type *mtty_mdev_types[] = {
  163. &mtty_types[0].type,
  164. &mtty_types[1].type,
  165. };
  166. static atomic_t mdev_avail_ports = ATOMIC_INIT(MAX_MTTYS);
  167. static const struct file_operations vd_fops = {
  168. .owner = THIS_MODULE,
  169. };
  170. static const struct vfio_device_ops mtty_dev_ops;
  171. /* Helper functions */
  172. static void dump_buffer(u8 *buf, uint32_t count)
  173. {
  174. #if defined(DEBUG)
  175. int i;
  176. pr_info("Buffer:\n");
  177. for (i = 0; i < count; i++) {
  178. pr_info("%2x ", *(buf + i));
  179. if ((i + 1) % 16 == 0)
  180. pr_info("\n");
  181. }
  182. #endif
  183. }
  184. static bool is_intx(struct mdev_state *mdev_state)
  185. {
  186. return mdev_state->irq_index == VFIO_PCI_INTX_IRQ_INDEX;
  187. }
  188. static bool is_msi(struct mdev_state *mdev_state)
  189. {
  190. return mdev_state->irq_index == VFIO_PCI_MSI_IRQ_INDEX;
  191. }
  192. static bool is_noirq(struct mdev_state *mdev_state)
  193. {
  194. return !is_intx(mdev_state) && !is_msi(mdev_state);
  195. }
  196. static void mtty_trigger_interrupt(struct mdev_state *mdev_state)
  197. {
  198. lockdep_assert_held(&mdev_state->ops_lock);
  199. if (is_msi(mdev_state)) {
  200. if (mdev_state->msi_evtfd)
  201. eventfd_signal(mdev_state->msi_evtfd);
  202. } else if (is_intx(mdev_state)) {
  203. if (mdev_state->intx_evtfd && !mdev_state->intx_mask) {
  204. eventfd_signal(mdev_state->intx_evtfd);
  205. mdev_state->intx_mask = true;
  206. }
  207. }
  208. }
  209. static void mtty_create_config_space(struct mdev_state *mdev_state)
  210. {
  211. /* PCI dev ID */
  212. STORE_LE32((u32 *) &mdev_state->vconfig[0x0], 0x32534348);
  213. /* Control: I/O+, Mem-, BusMaster- */
  214. STORE_LE16((u16 *) &mdev_state->vconfig[0x4], 0x0001);
  215. /* Status: capabilities list absent */
  216. STORE_LE16((u16 *) &mdev_state->vconfig[0x6], 0x0200);
  217. /* Rev ID */
  218. mdev_state->vconfig[0x8] = 0x10;
  219. /* programming interface class : 16550-compatible serial controller */
  220. mdev_state->vconfig[0x9] = 0x02;
  221. /* Sub class : 00 */
  222. mdev_state->vconfig[0xa] = 0x00;
  223. /* Base class : Simple Communication controllers */
  224. mdev_state->vconfig[0xb] = 0x07;
  225. /* base address registers */
  226. /* BAR0: IO space */
  227. STORE_LE32((u32 *) &mdev_state->vconfig[0x10], 0x000001);
  228. mdev_state->bar_mask[0] = ~(MTTY_IO_BAR_SIZE) + 1;
  229. if (mdev_state->nr_ports == 2) {
  230. /* BAR1: IO space */
  231. STORE_LE32((u32 *) &mdev_state->vconfig[0x14], 0x000001);
  232. mdev_state->bar_mask[1] = ~(MTTY_IO_BAR_SIZE) + 1;
  233. }
  234. /* Subsystem ID */
  235. STORE_LE32((u32 *) &mdev_state->vconfig[0x2c], 0x32534348);
  236. mdev_state->vconfig[0x34] = 0x00; /* Cap Ptr */
  237. mdev_state->vconfig[0x3d] = 0x01; /* interrupt pin (INTA#) */
  238. /* Vendor specific data */
  239. mdev_state->vconfig[0x40] = 0x23;
  240. mdev_state->vconfig[0x43] = 0x80;
  241. mdev_state->vconfig[0x44] = 0x23;
  242. mdev_state->vconfig[0x48] = 0x23;
  243. mdev_state->vconfig[0x4c] = 0x23;
  244. mdev_state->vconfig[0x60] = 0x50;
  245. mdev_state->vconfig[0x61] = 0x43;
  246. mdev_state->vconfig[0x62] = 0x49;
  247. mdev_state->vconfig[0x63] = 0x20;
  248. mdev_state->vconfig[0x64] = 0x53;
  249. mdev_state->vconfig[0x65] = 0x65;
  250. mdev_state->vconfig[0x66] = 0x72;
  251. mdev_state->vconfig[0x67] = 0x69;
  252. mdev_state->vconfig[0x68] = 0x61;
  253. mdev_state->vconfig[0x69] = 0x6c;
  254. mdev_state->vconfig[0x6a] = 0x2f;
  255. mdev_state->vconfig[0x6b] = 0x55;
  256. mdev_state->vconfig[0x6c] = 0x41;
  257. mdev_state->vconfig[0x6d] = 0x52;
  258. mdev_state->vconfig[0x6e] = 0x54;
  259. }
  260. static void handle_pci_cfg_write(struct mdev_state *mdev_state, u16 offset,
  261. u8 *buf, u32 count)
  262. {
  263. u32 cfg_addr, bar_mask, bar_index = 0;
  264. switch (offset) {
  265. case 0x04: /* device control */
  266. case 0x06: /* device status */
  267. /* do nothing */
  268. break;
  269. case 0x3c: /* interrupt line */
  270. mdev_state->vconfig[0x3c] = buf[0];
  271. break;
  272. case 0x3d:
  273. /*
  274. * Interrupt Pin is hardwired to INTA.
  275. * This field is write protected by hardware
  276. */
  277. break;
  278. case 0x10: /* BAR0 */
  279. case 0x14: /* BAR1 */
  280. if (offset == 0x10)
  281. bar_index = 0;
  282. else if (offset == 0x14)
  283. bar_index = 1;
  284. if ((mdev_state->nr_ports == 1) && (bar_index == 1)) {
  285. STORE_LE32(&mdev_state->vconfig[offset], 0);
  286. break;
  287. }
  288. cfg_addr = *(u32 *)buf;
  289. pr_info("BAR%d addr 0x%x\n", bar_index, cfg_addr);
  290. if (cfg_addr == 0xffffffff) {
  291. bar_mask = mdev_state->bar_mask[bar_index];
  292. cfg_addr = (cfg_addr & bar_mask);
  293. }
  294. cfg_addr |= (mdev_state->vconfig[offset] & 0x3ul);
  295. STORE_LE32(&mdev_state->vconfig[offset], cfg_addr);
  296. break;
  297. case 0x18: /* BAR2 */
  298. case 0x1c: /* BAR3 */
  299. case 0x20: /* BAR4 */
  300. STORE_LE32(&mdev_state->vconfig[offset], 0);
  301. break;
  302. default:
  303. pr_info("PCI config write @0x%x of %d bytes not handled\n",
  304. offset, count);
  305. break;
  306. }
  307. }
  308. static void handle_bar_write(unsigned int index, struct mdev_state *mdev_state,
  309. u16 offset, u8 *buf, u32 count)
  310. {
  311. u8 data = *buf;
  312. /* Handle data written by guest */
  313. switch (offset) {
  314. case UART_TX:
  315. /* if DLAB set, data is LSB of divisor */
  316. if (mdev_state->s[index].dlab) {
  317. mdev_state->s[index].divisor |= data;
  318. break;
  319. }
  320. mutex_lock(&mdev_state->rxtx_lock);
  321. /* save in TX buffer */
  322. if (mdev_state->s[index].rxtx.count <
  323. mdev_state->s[index].max_fifo_size) {
  324. mdev_state->s[index].rxtx.fifo[
  325. mdev_state->s[index].rxtx.head] = data;
  326. mdev_state->s[index].rxtx.count++;
  327. CIRCULAR_BUF_INC_IDX(mdev_state->s[index].rxtx.head);
  328. mdev_state->s[index].overrun = false;
  329. /*
  330. * Trigger interrupt if receive data interrupt is
  331. * enabled and fifo reached trigger level
  332. */
  333. if ((mdev_state->s[index].uart_reg[UART_IER] &
  334. UART_IER_RDI) &&
  335. (mdev_state->s[index].rxtx.count ==
  336. mdev_state->s[index].intr_trigger_level)) {
  337. /* trigger interrupt */
  338. #if defined(DEBUG_INTR)
  339. pr_err("Serial port %d: Fifo level trigger\n",
  340. index);
  341. #endif
  342. mtty_trigger_interrupt(mdev_state);
  343. }
  344. } else {
  345. #if defined(DEBUG_INTR)
  346. pr_err("Serial port %d: Buffer Overflow\n", index);
  347. #endif
  348. mdev_state->s[index].overrun = true;
  349. /*
  350. * Trigger interrupt if receiver line status interrupt
  351. * is enabled
  352. */
  353. if (mdev_state->s[index].uart_reg[UART_IER] &
  354. UART_IER_RLSI)
  355. mtty_trigger_interrupt(mdev_state);
  356. }
  357. mutex_unlock(&mdev_state->rxtx_lock);
  358. break;
  359. case UART_IER:
  360. /* if DLAB set, data is MSB of divisor */
  361. if (mdev_state->s[index].dlab)
  362. mdev_state->s[index].divisor |= (u16)data << 8;
  363. else {
  364. mdev_state->s[index].uart_reg[offset] = data;
  365. mutex_lock(&mdev_state->rxtx_lock);
  366. if ((data & UART_IER_THRI) &&
  367. (mdev_state->s[index].rxtx.head ==
  368. mdev_state->s[index].rxtx.tail)) {
  369. #if defined(DEBUG_INTR)
  370. pr_err("Serial port %d: IER_THRI write\n",
  371. index);
  372. #endif
  373. mtty_trigger_interrupt(mdev_state);
  374. }
  375. mutex_unlock(&mdev_state->rxtx_lock);
  376. }
  377. break;
  378. case UART_FCR:
  379. mdev_state->s[index].fcr = data;
  380. mutex_lock(&mdev_state->rxtx_lock);
  381. if (data & (UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT)) {
  382. /* clear loop back FIFO */
  383. mdev_state->s[index].rxtx.count = 0;
  384. mdev_state->s[index].rxtx.head = 0;
  385. mdev_state->s[index].rxtx.tail = 0;
  386. }
  387. mutex_unlock(&mdev_state->rxtx_lock);
  388. switch (data & UART_FCR_TRIGGER_MASK) {
  389. case UART_FCR_TRIGGER_1:
  390. mdev_state->s[index].intr_trigger_level = 1;
  391. break;
  392. case UART_FCR_TRIGGER_4:
  393. mdev_state->s[index].intr_trigger_level = 4;
  394. break;
  395. case UART_FCR_TRIGGER_8:
  396. mdev_state->s[index].intr_trigger_level = 8;
  397. break;
  398. case UART_FCR_TRIGGER_14:
  399. mdev_state->s[index].intr_trigger_level = 14;
  400. break;
  401. }
  402. /*
  403. * Set trigger level to 1 otherwise or implement timer with
  404. * timeout of 4 characters and on expiring that timer set
  405. * Recevice data timeout in IIR register
  406. */
  407. mdev_state->s[index].intr_trigger_level = 1;
  408. if (data & UART_FCR_ENABLE_FIFO)
  409. mdev_state->s[index].max_fifo_size = MAX_FIFO_SIZE;
  410. else {
  411. mdev_state->s[index].max_fifo_size = 1;
  412. mdev_state->s[index].intr_trigger_level = 1;
  413. }
  414. break;
  415. case UART_LCR:
  416. if (data & UART_LCR_DLAB) {
  417. mdev_state->s[index].dlab = true;
  418. mdev_state->s[index].divisor = 0;
  419. } else
  420. mdev_state->s[index].dlab = false;
  421. mdev_state->s[index].uart_reg[offset] = data;
  422. break;
  423. case UART_MCR:
  424. mdev_state->s[index].uart_reg[offset] = data;
  425. if ((mdev_state->s[index].uart_reg[UART_IER] & UART_IER_MSI) &&
  426. (data & UART_MCR_OUT2)) {
  427. #if defined(DEBUG_INTR)
  428. pr_err("Serial port %d: MCR_OUT2 write\n", index);
  429. #endif
  430. mtty_trigger_interrupt(mdev_state);
  431. }
  432. if ((mdev_state->s[index].uart_reg[UART_IER] & UART_IER_MSI) &&
  433. (data & (UART_MCR_RTS | UART_MCR_DTR))) {
  434. #if defined(DEBUG_INTR)
  435. pr_err("Serial port %d: MCR RTS/DTR write\n", index);
  436. #endif
  437. mtty_trigger_interrupt(mdev_state);
  438. }
  439. break;
  440. case UART_LSR:
  441. case UART_MSR:
  442. /* do nothing */
  443. break;
  444. case UART_SCR:
  445. mdev_state->s[index].uart_reg[offset] = data;
  446. break;
  447. default:
  448. break;
  449. }
  450. }
  451. static void handle_bar_read(unsigned int index, struct mdev_state *mdev_state,
  452. u16 offset, u8 *buf, u32 count)
  453. {
  454. /* Handle read requests by guest */
  455. switch (offset) {
  456. case UART_RX:
  457. /* if DLAB set, data is LSB of divisor */
  458. if (mdev_state->s[index].dlab) {
  459. *buf = (u8)mdev_state->s[index].divisor;
  460. break;
  461. }
  462. mutex_lock(&mdev_state->rxtx_lock);
  463. /* return data in tx buffer */
  464. if (mdev_state->s[index].rxtx.head !=
  465. mdev_state->s[index].rxtx.tail) {
  466. *buf = mdev_state->s[index].rxtx.fifo[
  467. mdev_state->s[index].rxtx.tail];
  468. mdev_state->s[index].rxtx.count--;
  469. CIRCULAR_BUF_INC_IDX(mdev_state->s[index].rxtx.tail);
  470. }
  471. if (mdev_state->s[index].rxtx.head ==
  472. mdev_state->s[index].rxtx.tail) {
  473. /*
  474. * Trigger interrupt if tx buffer empty interrupt is
  475. * enabled and fifo is empty
  476. */
  477. #if defined(DEBUG_INTR)
  478. pr_err("Serial port %d: Buffer Empty\n", index);
  479. #endif
  480. if (mdev_state->s[index].uart_reg[UART_IER] &
  481. UART_IER_THRI)
  482. mtty_trigger_interrupt(mdev_state);
  483. }
  484. mutex_unlock(&mdev_state->rxtx_lock);
  485. break;
  486. case UART_IER:
  487. if (mdev_state->s[index].dlab) {
  488. *buf = (u8)(mdev_state->s[index].divisor >> 8);
  489. break;
  490. }
  491. *buf = mdev_state->s[index].uart_reg[offset] & 0x0f;
  492. break;
  493. case UART_IIR:
  494. {
  495. u8 ier = mdev_state->s[index].uart_reg[UART_IER];
  496. *buf = 0;
  497. mutex_lock(&mdev_state->rxtx_lock);
  498. /* Interrupt priority 1: Parity, overrun, framing or break */
  499. if ((ier & UART_IER_RLSI) && mdev_state->s[index].overrun)
  500. *buf |= UART_IIR_RLSI;
  501. /* Interrupt priority 2: Fifo trigger level reached */
  502. if ((ier & UART_IER_RDI) &&
  503. (mdev_state->s[index].rxtx.count >=
  504. mdev_state->s[index].intr_trigger_level))
  505. *buf |= UART_IIR_RDI;
  506. /* Interrupt priotiry 3: transmitter holding register empty */
  507. if ((ier & UART_IER_THRI) &&
  508. (mdev_state->s[index].rxtx.head ==
  509. mdev_state->s[index].rxtx.tail))
  510. *buf |= UART_IIR_THRI;
  511. /* Interrupt priotiry 4: Modem status: CTS, DSR, RI or DCD */
  512. if ((ier & UART_IER_MSI) &&
  513. (mdev_state->s[index].uart_reg[UART_MCR] &
  514. (UART_MCR_RTS | UART_MCR_DTR)))
  515. *buf |= UART_IIR_MSI;
  516. /* bit0: 0=> interrupt pending, 1=> no interrupt is pending */
  517. if (*buf == 0)
  518. *buf = UART_IIR_NO_INT;
  519. /* set bit 6 & 7 to be 16550 compatible */
  520. *buf |= 0xC0;
  521. mutex_unlock(&mdev_state->rxtx_lock);
  522. }
  523. break;
  524. case UART_LCR:
  525. case UART_MCR:
  526. *buf = mdev_state->s[index].uart_reg[offset];
  527. break;
  528. case UART_LSR:
  529. {
  530. u8 lsr = 0;
  531. mutex_lock(&mdev_state->rxtx_lock);
  532. /* at least one char in FIFO */
  533. if (mdev_state->s[index].rxtx.head !=
  534. mdev_state->s[index].rxtx.tail)
  535. lsr |= UART_LSR_DR;
  536. /* if FIFO overrun */
  537. if (mdev_state->s[index].overrun)
  538. lsr |= UART_LSR_OE;
  539. /* transmit FIFO empty and tramsitter empty */
  540. if (mdev_state->s[index].rxtx.head ==
  541. mdev_state->s[index].rxtx.tail)
  542. lsr |= UART_LSR_TEMT | UART_LSR_THRE;
  543. mutex_unlock(&mdev_state->rxtx_lock);
  544. *buf = lsr;
  545. break;
  546. }
  547. case UART_MSR:
  548. *buf = UART_MSR_DSR | UART_MSR_DDSR | UART_MSR_DCD;
  549. mutex_lock(&mdev_state->rxtx_lock);
  550. /* if AFE is 1 and FIFO have space, set CTS bit */
  551. if (mdev_state->s[index].uart_reg[UART_MCR] &
  552. UART_MCR_AFE) {
  553. if (mdev_state->s[index].rxtx.count <
  554. mdev_state->s[index].max_fifo_size)
  555. *buf |= UART_MSR_CTS | UART_MSR_DCTS;
  556. } else
  557. *buf |= UART_MSR_CTS | UART_MSR_DCTS;
  558. mutex_unlock(&mdev_state->rxtx_lock);
  559. break;
  560. case UART_SCR:
  561. *buf = mdev_state->s[index].uart_reg[offset];
  562. break;
  563. default:
  564. break;
  565. }
  566. }
  567. static void mdev_read_base(struct mdev_state *mdev_state)
  568. {
  569. int index, pos;
  570. u32 start_lo, start_hi;
  571. u32 mem_type;
  572. pos = PCI_BASE_ADDRESS_0;
  573. for (index = 0; index <= VFIO_PCI_BAR5_REGION_INDEX; index++) {
  574. if (!mdev_state->region_info[index].size)
  575. continue;
  576. start_lo = (*(u32 *)(mdev_state->vconfig + pos)) &
  577. PCI_BASE_ADDRESS_MEM_MASK;
  578. mem_type = (*(u32 *)(mdev_state->vconfig + pos)) &
  579. PCI_BASE_ADDRESS_MEM_TYPE_MASK;
  580. switch (mem_type) {
  581. case PCI_BASE_ADDRESS_MEM_TYPE_64:
  582. start_hi = (*(u32 *)(mdev_state->vconfig + pos + 4));
  583. pos += 4;
  584. break;
  585. case PCI_BASE_ADDRESS_MEM_TYPE_32:
  586. case PCI_BASE_ADDRESS_MEM_TYPE_1M:
  587. /* 1M mem BAR treated as 32-bit BAR */
  588. default:
  589. /* mem unknown type treated as 32-bit BAR */
  590. start_hi = 0;
  591. break;
  592. }
  593. pos += 4;
  594. mdev_state->region_info[index].start = ((u64)start_hi << 32) |
  595. start_lo;
  596. }
  597. }
  598. static ssize_t mdev_access(struct mdev_state *mdev_state, u8 *buf, size_t count,
  599. loff_t pos, bool is_write)
  600. {
  601. unsigned int index;
  602. loff_t offset;
  603. int ret = 0;
  604. if (!buf)
  605. return -EINVAL;
  606. mutex_lock(&mdev_state->ops_lock);
  607. index = MTTY_VFIO_PCI_OFFSET_TO_INDEX(pos);
  608. offset = pos & MTTY_VFIO_PCI_OFFSET_MASK;
  609. switch (index) {
  610. case VFIO_PCI_CONFIG_REGION_INDEX:
  611. #if defined(DEBUG)
  612. pr_info("%s: PCI config space %s at offset 0x%llx\n",
  613. __func__, is_write ? "write" : "read", offset);
  614. #endif
  615. if (is_write) {
  616. dump_buffer(buf, count);
  617. handle_pci_cfg_write(mdev_state, offset, buf, count);
  618. } else {
  619. memcpy(buf, (mdev_state->vconfig + offset), count);
  620. dump_buffer(buf, count);
  621. }
  622. break;
  623. case VFIO_PCI_BAR0_REGION_INDEX ... VFIO_PCI_BAR5_REGION_INDEX:
  624. if (!mdev_state->region_info[index].start)
  625. mdev_read_base(mdev_state);
  626. if (is_write) {
  627. dump_buffer(buf, count);
  628. #if defined(DEBUG_REGS)
  629. pr_info("%s: BAR%d WR @0x%llx %s val:0x%02x dlab:%d\n",
  630. __func__, index, offset, wr_reg[offset],
  631. *buf, mdev_state->s[index].dlab);
  632. #endif
  633. handle_bar_write(index, mdev_state, offset, buf, count);
  634. } else {
  635. handle_bar_read(index, mdev_state, offset, buf, count);
  636. dump_buffer(buf, count);
  637. #if defined(DEBUG_REGS)
  638. pr_info("%s: BAR%d RD @0x%llx %s val:0x%02x dlab:%d\n",
  639. __func__, index, offset, rd_reg[offset],
  640. *buf, mdev_state->s[index].dlab);
  641. #endif
  642. }
  643. break;
  644. default:
  645. ret = -1;
  646. goto accessfailed;
  647. }
  648. ret = count;
  649. accessfailed:
  650. mutex_unlock(&mdev_state->ops_lock);
  651. return ret;
  652. }
  653. static size_t mtty_data_size(struct mdev_state *mdev_state)
  654. {
  655. return offsetof(struct mtty_data, ports) +
  656. (mdev_state->nr_ports * sizeof(struct serial_port));
  657. }
  658. static void mtty_disable_file(struct mtty_migration_file *migf)
  659. {
  660. mutex_lock(&migf->lock);
  661. migf->disabled = true;
  662. migf->filled_size = 0;
  663. migf->filp->f_pos = 0;
  664. mutex_unlock(&migf->lock);
  665. }
  666. static void mtty_disable_files(struct mdev_state *mdev_state)
  667. {
  668. if (mdev_state->saving_migf) {
  669. mtty_disable_file(mdev_state->saving_migf);
  670. fput(mdev_state->saving_migf->filp);
  671. mdev_state->saving_migf = NULL;
  672. }
  673. if (mdev_state->resuming_migf) {
  674. mtty_disable_file(mdev_state->resuming_migf);
  675. fput(mdev_state->resuming_migf->filp);
  676. mdev_state->resuming_migf = NULL;
  677. }
  678. }
  679. static void mtty_state_mutex_unlock(struct mdev_state *mdev_state)
  680. {
  681. again:
  682. mutex_lock(&mdev_state->reset_mutex);
  683. if (mdev_state->deferred_reset) {
  684. mdev_state->deferred_reset = false;
  685. mutex_unlock(&mdev_state->reset_mutex);
  686. mdev_state->state = VFIO_DEVICE_STATE_RUNNING;
  687. mtty_disable_files(mdev_state);
  688. goto again;
  689. }
  690. mutex_unlock(&mdev_state->state_mutex);
  691. mutex_unlock(&mdev_state->reset_mutex);
  692. }
  693. static int mtty_release_migf(struct inode *inode, struct file *filp)
  694. {
  695. struct mtty_migration_file *migf = filp->private_data;
  696. mtty_disable_file(migf);
  697. mutex_destroy(&migf->lock);
  698. kfree(migf);
  699. return 0;
  700. }
  701. static long mtty_precopy_ioctl(struct file *filp, unsigned int cmd,
  702. unsigned long arg)
  703. {
  704. struct mtty_migration_file *migf = filp->private_data;
  705. struct mdev_state *mdev_state = migf->mdev_state;
  706. loff_t *pos = &filp->f_pos;
  707. struct vfio_precopy_info info = {};
  708. unsigned long minsz;
  709. int ret;
  710. if (cmd != VFIO_MIG_GET_PRECOPY_INFO)
  711. return -ENOTTY;
  712. minsz = offsetofend(struct vfio_precopy_info, dirty_bytes);
  713. if (copy_from_user(&info, (void __user *)arg, minsz))
  714. return -EFAULT;
  715. if (info.argsz < minsz)
  716. return -EINVAL;
  717. mutex_lock(&mdev_state->state_mutex);
  718. if (mdev_state->state != VFIO_DEVICE_STATE_PRE_COPY &&
  719. mdev_state->state != VFIO_DEVICE_STATE_PRE_COPY_P2P) {
  720. ret = -EINVAL;
  721. goto unlock;
  722. }
  723. mutex_lock(&migf->lock);
  724. if (migf->disabled) {
  725. mutex_unlock(&migf->lock);
  726. ret = -ENODEV;
  727. goto unlock;
  728. }
  729. if (*pos > migf->filled_size) {
  730. mutex_unlock(&migf->lock);
  731. ret = -EINVAL;
  732. goto unlock;
  733. }
  734. info.dirty_bytes = 0;
  735. info.initial_bytes = migf->filled_size - *pos;
  736. mutex_unlock(&migf->lock);
  737. ret = copy_to_user((void __user *)arg, &info, minsz) ? -EFAULT : 0;
  738. unlock:
  739. mtty_state_mutex_unlock(mdev_state);
  740. return ret;
  741. }
  742. static ssize_t mtty_save_read(struct file *filp, char __user *buf,
  743. size_t len, loff_t *pos)
  744. {
  745. struct mtty_migration_file *migf = filp->private_data;
  746. ssize_t ret = 0;
  747. if (pos)
  748. return -ESPIPE;
  749. pos = &filp->f_pos;
  750. mutex_lock(&migf->lock);
  751. dev_dbg(migf->mdev_state->vdev.dev, "%s ask %zu\n", __func__, len);
  752. if (migf->disabled) {
  753. ret = -ENODEV;
  754. goto out_unlock;
  755. }
  756. if (*pos > migf->filled_size) {
  757. ret = -EINVAL;
  758. goto out_unlock;
  759. }
  760. len = min_t(size_t, migf->filled_size - *pos, len);
  761. if (len) {
  762. if (copy_to_user(buf, (void *)&migf->data + *pos, len)) {
  763. ret = -EFAULT;
  764. goto out_unlock;
  765. }
  766. *pos += len;
  767. ret = len;
  768. }
  769. out_unlock:
  770. dev_dbg(migf->mdev_state->vdev.dev, "%s read %zu\n", __func__, ret);
  771. mutex_unlock(&migf->lock);
  772. return ret;
  773. }
  774. static const struct file_operations mtty_save_fops = {
  775. .owner = THIS_MODULE,
  776. .read = mtty_save_read,
  777. .unlocked_ioctl = mtty_precopy_ioctl,
  778. .compat_ioctl = compat_ptr_ioctl,
  779. .release = mtty_release_migf,
  780. };
  781. static void mtty_save_state(struct mdev_state *mdev_state)
  782. {
  783. struct mtty_migration_file *migf = mdev_state->saving_migf;
  784. int i;
  785. mutex_lock(&migf->lock);
  786. for (i = 0; i < mdev_state->nr_ports; i++) {
  787. memcpy(&migf->data.ports[i],
  788. &mdev_state->s[i], sizeof(struct serial_port));
  789. migf->filled_size += sizeof(struct serial_port);
  790. }
  791. dev_dbg(mdev_state->vdev.dev,
  792. "%s filled to %zu\n", __func__, migf->filled_size);
  793. mutex_unlock(&migf->lock);
  794. }
  795. static int mtty_load_state(struct mdev_state *mdev_state)
  796. {
  797. struct mtty_migration_file *migf = mdev_state->resuming_migf;
  798. int i;
  799. mutex_lock(&migf->lock);
  800. /* magic and version already tested by resume write fn */
  801. if (migf->filled_size < mtty_data_size(mdev_state)) {
  802. dev_dbg(mdev_state->vdev.dev, "%s expected %zu, got %zu\n",
  803. __func__, mtty_data_size(mdev_state),
  804. migf->filled_size);
  805. mutex_unlock(&migf->lock);
  806. return -EINVAL;
  807. }
  808. for (i = 0; i < mdev_state->nr_ports; i++)
  809. memcpy(&mdev_state->s[i],
  810. &migf->data.ports[i], sizeof(struct serial_port));
  811. mutex_unlock(&migf->lock);
  812. return 0;
  813. }
  814. static struct mtty_migration_file *
  815. mtty_save_device_data(struct mdev_state *mdev_state,
  816. enum vfio_device_mig_state state)
  817. {
  818. struct mtty_migration_file *migf = mdev_state->saving_migf;
  819. struct mtty_migration_file *ret = NULL;
  820. if (migf) {
  821. if (state == VFIO_DEVICE_STATE_STOP_COPY)
  822. goto fill_data;
  823. return ret;
  824. }
  825. migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
  826. if (!migf)
  827. return ERR_PTR(-ENOMEM);
  828. migf->filp = anon_inode_getfile("mtty_mig", &mtty_save_fops,
  829. migf, O_RDONLY);
  830. if (IS_ERR(migf->filp)) {
  831. int rc = PTR_ERR(migf->filp);
  832. kfree(migf);
  833. return ERR_PTR(rc);
  834. }
  835. stream_open(migf->filp->f_inode, migf->filp);
  836. mutex_init(&migf->lock);
  837. migf->mdev_state = mdev_state;
  838. migf->data.magic = MTTY_MAGIC;
  839. migf->data.major_ver = MTTY_MAJOR_VER;
  840. migf->data.minor_ver = MTTY_MINOR_VER;
  841. migf->data.nr_ports = mdev_state->nr_ports;
  842. migf->filled_size = offsetof(struct mtty_data, ports);
  843. dev_dbg(mdev_state->vdev.dev, "%s filled header to %zu\n",
  844. __func__, migf->filled_size);
  845. ret = mdev_state->saving_migf = migf;
  846. fill_data:
  847. if (state == VFIO_DEVICE_STATE_STOP_COPY)
  848. mtty_save_state(mdev_state);
  849. return ret;
  850. }
  851. static ssize_t mtty_resume_write(struct file *filp, const char __user *buf,
  852. size_t len, loff_t *pos)
  853. {
  854. struct mtty_migration_file *migf = filp->private_data;
  855. struct mdev_state *mdev_state = migf->mdev_state;
  856. loff_t requested_length;
  857. ssize_t ret = 0;
  858. if (pos)
  859. return -ESPIPE;
  860. pos = &filp->f_pos;
  861. if (*pos < 0 ||
  862. check_add_overflow((loff_t)len, *pos, &requested_length))
  863. return -EINVAL;
  864. if (requested_length > mtty_data_size(mdev_state))
  865. return -ENOMEM;
  866. mutex_lock(&migf->lock);
  867. if (migf->disabled) {
  868. ret = -ENODEV;
  869. goto out_unlock;
  870. }
  871. if (copy_from_user((void *)&migf->data + *pos, buf, len)) {
  872. ret = -EFAULT;
  873. goto out_unlock;
  874. }
  875. *pos += len;
  876. ret = len;
  877. dev_dbg(migf->mdev_state->vdev.dev, "%s received %zu, total %zu\n",
  878. __func__, len, migf->filled_size + len);
  879. if (migf->filled_size < offsetof(struct mtty_data, ports) &&
  880. migf->filled_size + len >= offsetof(struct mtty_data, ports)) {
  881. if (migf->data.magic != MTTY_MAGIC || migf->data.flags ||
  882. migf->data.major_ver != MTTY_MAJOR_VER ||
  883. migf->data.minor_ver != MTTY_MINOR_VER ||
  884. migf->data.nr_ports != mdev_state->nr_ports) {
  885. dev_dbg(migf->mdev_state->vdev.dev,
  886. "%s failed validation\n", __func__);
  887. ret = -EFAULT;
  888. } else {
  889. dev_dbg(migf->mdev_state->vdev.dev,
  890. "%s header validated\n", __func__);
  891. }
  892. }
  893. migf->filled_size += len;
  894. out_unlock:
  895. mutex_unlock(&migf->lock);
  896. return ret;
  897. }
  898. static const struct file_operations mtty_resume_fops = {
  899. .owner = THIS_MODULE,
  900. .write = mtty_resume_write,
  901. .release = mtty_release_migf,
  902. };
  903. static struct mtty_migration_file *
  904. mtty_resume_device_data(struct mdev_state *mdev_state)
  905. {
  906. struct mtty_migration_file *migf;
  907. int ret;
  908. migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
  909. if (!migf)
  910. return ERR_PTR(-ENOMEM);
  911. migf->filp = anon_inode_getfile("mtty_mig", &mtty_resume_fops,
  912. migf, O_WRONLY);
  913. if (IS_ERR(migf->filp)) {
  914. ret = PTR_ERR(migf->filp);
  915. kfree(migf);
  916. return ERR_PTR(ret);
  917. }
  918. stream_open(migf->filp->f_inode, migf->filp);
  919. mutex_init(&migf->lock);
  920. migf->mdev_state = mdev_state;
  921. mdev_state->resuming_migf = migf;
  922. return migf;
  923. }
  924. static struct file *mtty_step_state(struct mdev_state *mdev_state,
  925. enum vfio_device_mig_state new)
  926. {
  927. enum vfio_device_mig_state cur = mdev_state->state;
  928. dev_dbg(mdev_state->vdev.dev, "%s: %d -> %d\n", __func__, cur, new);
  929. /*
  930. * The following state transitions are no-op considering
  931. * mtty does not do DMA nor require any explicit start/stop.
  932. *
  933. * RUNNING -> RUNNING_P2P
  934. * RUNNING_P2P -> RUNNING
  935. * RUNNING_P2P -> STOP
  936. * PRE_COPY -> PRE_COPY_P2P
  937. * PRE_COPY_P2P -> PRE_COPY
  938. * STOP -> RUNNING_P2P
  939. */
  940. if ((cur == VFIO_DEVICE_STATE_RUNNING &&
  941. new == VFIO_DEVICE_STATE_RUNNING_P2P) ||
  942. (cur == VFIO_DEVICE_STATE_RUNNING_P2P &&
  943. (new == VFIO_DEVICE_STATE_RUNNING ||
  944. new == VFIO_DEVICE_STATE_STOP)) ||
  945. (cur == VFIO_DEVICE_STATE_PRE_COPY &&
  946. new == VFIO_DEVICE_STATE_PRE_COPY_P2P) ||
  947. (cur == VFIO_DEVICE_STATE_PRE_COPY_P2P &&
  948. new == VFIO_DEVICE_STATE_PRE_COPY) ||
  949. (cur == VFIO_DEVICE_STATE_STOP &&
  950. new == VFIO_DEVICE_STATE_RUNNING_P2P))
  951. return NULL;
  952. /*
  953. * The following state transitions simply close migration files,
  954. * with the exception of RESUMING -> STOP, which needs to load
  955. * the state first.
  956. *
  957. * RESUMING -> STOP
  958. * PRE_COPY -> RUNNING
  959. * PRE_COPY_P2P -> RUNNING_P2P
  960. * STOP_COPY -> STOP
  961. */
  962. if (cur == VFIO_DEVICE_STATE_RESUMING &&
  963. new == VFIO_DEVICE_STATE_STOP) {
  964. int ret;
  965. ret = mtty_load_state(mdev_state);
  966. if (ret)
  967. return ERR_PTR(ret);
  968. mtty_disable_files(mdev_state);
  969. return NULL;
  970. }
  971. if ((cur == VFIO_DEVICE_STATE_PRE_COPY &&
  972. new == VFIO_DEVICE_STATE_RUNNING) ||
  973. (cur == VFIO_DEVICE_STATE_PRE_COPY_P2P &&
  974. new == VFIO_DEVICE_STATE_RUNNING_P2P) ||
  975. (cur == VFIO_DEVICE_STATE_STOP_COPY &&
  976. new == VFIO_DEVICE_STATE_STOP)) {
  977. mtty_disable_files(mdev_state);
  978. return NULL;
  979. }
  980. /*
  981. * The following state transitions return migration files.
  982. *
  983. * RUNNING -> PRE_COPY
  984. * RUNNING_P2P -> PRE_COPY_P2P
  985. * STOP -> STOP_COPY
  986. * STOP -> RESUMING
  987. * PRE_COPY_P2P -> STOP_COPY
  988. */
  989. if ((cur == VFIO_DEVICE_STATE_RUNNING &&
  990. new == VFIO_DEVICE_STATE_PRE_COPY) ||
  991. (cur == VFIO_DEVICE_STATE_RUNNING_P2P &&
  992. new == VFIO_DEVICE_STATE_PRE_COPY_P2P) ||
  993. (cur == VFIO_DEVICE_STATE_STOP &&
  994. new == VFIO_DEVICE_STATE_STOP_COPY) ||
  995. (cur == VFIO_DEVICE_STATE_PRE_COPY_P2P &&
  996. new == VFIO_DEVICE_STATE_STOP_COPY)) {
  997. struct mtty_migration_file *migf;
  998. migf = mtty_save_device_data(mdev_state, new);
  999. if (IS_ERR(migf))
  1000. return ERR_CAST(migf);
  1001. if (migf) {
  1002. get_file(migf->filp);
  1003. return migf->filp;
  1004. }
  1005. return NULL;
  1006. }
  1007. if (cur == VFIO_DEVICE_STATE_STOP &&
  1008. new == VFIO_DEVICE_STATE_RESUMING) {
  1009. struct mtty_migration_file *migf;
  1010. migf = mtty_resume_device_data(mdev_state);
  1011. if (IS_ERR(migf))
  1012. return ERR_CAST(migf);
  1013. get_file(migf->filp);
  1014. return migf->filp;
  1015. }
  1016. /* vfio_mig_get_next_state() does not use arcs other than the above */
  1017. WARN_ON(true);
  1018. return ERR_PTR(-EINVAL);
  1019. }
  1020. static struct file *mtty_set_state(struct vfio_device *vdev,
  1021. enum vfio_device_mig_state new_state)
  1022. {
  1023. struct mdev_state *mdev_state =
  1024. container_of(vdev, struct mdev_state, vdev);
  1025. struct file *ret = NULL;
  1026. dev_dbg(vdev->dev, "%s -> %d\n", __func__, new_state);
  1027. mutex_lock(&mdev_state->state_mutex);
  1028. while (mdev_state->state != new_state) {
  1029. enum vfio_device_mig_state next_state;
  1030. int rc = vfio_mig_get_next_state(vdev, mdev_state->state,
  1031. new_state, &next_state);
  1032. if (rc) {
  1033. ret = ERR_PTR(rc);
  1034. break;
  1035. }
  1036. ret = mtty_step_state(mdev_state, next_state);
  1037. if (IS_ERR(ret))
  1038. break;
  1039. mdev_state->state = next_state;
  1040. if (WARN_ON(ret && new_state != next_state)) {
  1041. fput(ret);
  1042. ret = ERR_PTR(-EINVAL);
  1043. break;
  1044. }
  1045. }
  1046. mtty_state_mutex_unlock(mdev_state);
  1047. return ret;
  1048. }
  1049. static int mtty_get_state(struct vfio_device *vdev,
  1050. enum vfio_device_mig_state *current_state)
  1051. {
  1052. struct mdev_state *mdev_state =
  1053. container_of(vdev, struct mdev_state, vdev);
  1054. mutex_lock(&mdev_state->state_mutex);
  1055. *current_state = mdev_state->state;
  1056. mtty_state_mutex_unlock(mdev_state);
  1057. return 0;
  1058. }
  1059. static int mtty_get_data_size(struct vfio_device *vdev,
  1060. unsigned long *stop_copy_length)
  1061. {
  1062. struct mdev_state *mdev_state =
  1063. container_of(vdev, struct mdev_state, vdev);
  1064. *stop_copy_length = mtty_data_size(mdev_state);
  1065. return 0;
  1066. }
  1067. static const struct vfio_migration_ops mtty_migration_ops = {
  1068. .migration_set_state = mtty_set_state,
  1069. .migration_get_state = mtty_get_state,
  1070. .migration_get_data_size = mtty_get_data_size,
  1071. };
  1072. static int mtty_log_start(struct vfio_device *vdev,
  1073. struct rb_root_cached *ranges,
  1074. u32 nnodes, u64 *page_size)
  1075. {
  1076. return 0;
  1077. }
  1078. static int mtty_log_stop(struct vfio_device *vdev)
  1079. {
  1080. return 0;
  1081. }
  1082. static int mtty_log_read_and_clear(struct vfio_device *vdev,
  1083. unsigned long iova, unsigned long length,
  1084. struct iova_bitmap *dirty)
  1085. {
  1086. return 0;
  1087. }
  1088. static const struct vfio_log_ops mtty_log_ops = {
  1089. .log_start = mtty_log_start,
  1090. .log_stop = mtty_log_stop,
  1091. .log_read_and_clear = mtty_log_read_and_clear,
  1092. };
  1093. static int mtty_init_dev(struct vfio_device *vdev)
  1094. {
  1095. struct mdev_state *mdev_state =
  1096. container_of(vdev, struct mdev_state, vdev);
  1097. struct mdev_device *mdev = to_mdev_device(vdev->dev);
  1098. struct mtty_type *type =
  1099. container_of(mdev->type, struct mtty_type, type);
  1100. int avail_ports = atomic_read(&mdev_avail_ports);
  1101. int ret;
  1102. do {
  1103. if (avail_ports < type->nr_ports)
  1104. return -ENOSPC;
  1105. } while (!atomic_try_cmpxchg(&mdev_avail_ports,
  1106. &avail_ports,
  1107. avail_ports - type->nr_ports));
  1108. mdev_state->nr_ports = type->nr_ports;
  1109. mdev_state->irq_index = -1;
  1110. mdev_state->s[0].max_fifo_size = MAX_FIFO_SIZE;
  1111. mdev_state->s[1].max_fifo_size = MAX_FIFO_SIZE;
  1112. mutex_init(&mdev_state->rxtx_lock);
  1113. mdev_state->vconfig = kzalloc(MTTY_CONFIG_SPACE_SIZE, GFP_KERNEL);
  1114. if (!mdev_state->vconfig) {
  1115. ret = -ENOMEM;
  1116. goto err_nr_ports;
  1117. }
  1118. mutex_init(&mdev_state->ops_lock);
  1119. mdev_state->mdev = mdev;
  1120. mtty_create_config_space(mdev_state);
  1121. mutex_init(&mdev_state->state_mutex);
  1122. mutex_init(&mdev_state->reset_mutex);
  1123. vdev->migration_flags = VFIO_MIGRATION_STOP_COPY |
  1124. VFIO_MIGRATION_P2P |
  1125. VFIO_MIGRATION_PRE_COPY;
  1126. vdev->mig_ops = &mtty_migration_ops;
  1127. vdev->log_ops = &mtty_log_ops;
  1128. mdev_state->state = VFIO_DEVICE_STATE_RUNNING;
  1129. return 0;
  1130. err_nr_ports:
  1131. atomic_add(type->nr_ports, &mdev_avail_ports);
  1132. return ret;
  1133. }
  1134. static int mtty_probe(struct mdev_device *mdev)
  1135. {
  1136. struct mdev_state *mdev_state;
  1137. int ret;
  1138. mdev_state = vfio_alloc_device(mdev_state, vdev, &mdev->dev,
  1139. &mtty_dev_ops);
  1140. if (IS_ERR(mdev_state))
  1141. return PTR_ERR(mdev_state);
  1142. ret = vfio_register_emulated_iommu_dev(&mdev_state->vdev);
  1143. if (ret)
  1144. goto err_put_vdev;
  1145. dev_set_drvdata(&mdev->dev, mdev_state);
  1146. return 0;
  1147. err_put_vdev:
  1148. vfio_put_device(&mdev_state->vdev);
  1149. return ret;
  1150. }
  1151. static void mtty_release_dev(struct vfio_device *vdev)
  1152. {
  1153. struct mdev_state *mdev_state =
  1154. container_of(vdev, struct mdev_state, vdev);
  1155. mutex_destroy(&mdev_state->reset_mutex);
  1156. mutex_destroy(&mdev_state->state_mutex);
  1157. atomic_add(mdev_state->nr_ports, &mdev_avail_ports);
  1158. kfree(mdev_state->vconfig);
  1159. }
  1160. static void mtty_remove(struct mdev_device *mdev)
  1161. {
  1162. struct mdev_state *mdev_state = dev_get_drvdata(&mdev->dev);
  1163. vfio_unregister_group_dev(&mdev_state->vdev);
  1164. vfio_put_device(&mdev_state->vdev);
  1165. }
  1166. static int mtty_reset(struct mdev_state *mdev_state)
  1167. {
  1168. pr_info("%s: called\n", __func__);
  1169. mutex_lock(&mdev_state->reset_mutex);
  1170. mdev_state->deferred_reset = true;
  1171. if (!mutex_trylock(&mdev_state->state_mutex)) {
  1172. mutex_unlock(&mdev_state->reset_mutex);
  1173. return 0;
  1174. }
  1175. mutex_unlock(&mdev_state->reset_mutex);
  1176. mtty_state_mutex_unlock(mdev_state);
  1177. return 0;
  1178. }
  1179. static ssize_t mtty_read(struct vfio_device *vdev, char __user *buf,
  1180. size_t count, loff_t *ppos)
  1181. {
  1182. struct mdev_state *mdev_state =
  1183. container_of(vdev, struct mdev_state, vdev);
  1184. unsigned int done = 0;
  1185. int ret;
  1186. while (count) {
  1187. size_t filled;
  1188. if (count >= 4 && !(*ppos % 4)) {
  1189. u32 val;
  1190. ret = mdev_access(mdev_state, (u8 *)&val, sizeof(val),
  1191. *ppos, false);
  1192. if (ret <= 0)
  1193. goto read_err;
  1194. if (copy_to_user(buf, &val, sizeof(val)))
  1195. goto read_err;
  1196. filled = 4;
  1197. } else if (count >= 2 && !(*ppos % 2)) {
  1198. u16 val;
  1199. ret = mdev_access(mdev_state, (u8 *)&val, sizeof(val),
  1200. *ppos, false);
  1201. if (ret <= 0)
  1202. goto read_err;
  1203. if (copy_to_user(buf, &val, sizeof(val)))
  1204. goto read_err;
  1205. filled = 2;
  1206. } else {
  1207. u8 val;
  1208. ret = mdev_access(mdev_state, (u8 *)&val, sizeof(val),
  1209. *ppos, false);
  1210. if (ret <= 0)
  1211. goto read_err;
  1212. if (copy_to_user(buf, &val, sizeof(val)))
  1213. goto read_err;
  1214. filled = 1;
  1215. }
  1216. count -= filled;
  1217. done += filled;
  1218. *ppos += filled;
  1219. buf += filled;
  1220. }
  1221. return done;
  1222. read_err:
  1223. return -EFAULT;
  1224. }
  1225. static ssize_t mtty_write(struct vfio_device *vdev, const char __user *buf,
  1226. size_t count, loff_t *ppos)
  1227. {
  1228. struct mdev_state *mdev_state =
  1229. container_of(vdev, struct mdev_state, vdev);
  1230. unsigned int done = 0;
  1231. int ret;
  1232. while (count) {
  1233. size_t filled;
  1234. if (count >= 4 && !(*ppos % 4)) {
  1235. u32 val;
  1236. if (copy_from_user(&val, buf, sizeof(val)))
  1237. goto write_err;
  1238. ret = mdev_access(mdev_state, (u8 *)&val, sizeof(val),
  1239. *ppos, true);
  1240. if (ret <= 0)
  1241. goto write_err;
  1242. filled = 4;
  1243. } else if (count >= 2 && !(*ppos % 2)) {
  1244. u16 val;
  1245. if (copy_from_user(&val, buf, sizeof(val)))
  1246. goto write_err;
  1247. ret = mdev_access(mdev_state, (u8 *)&val, sizeof(val),
  1248. *ppos, true);
  1249. if (ret <= 0)
  1250. goto write_err;
  1251. filled = 2;
  1252. } else {
  1253. u8 val;
  1254. if (copy_from_user(&val, buf, sizeof(val)))
  1255. goto write_err;
  1256. ret = mdev_access(mdev_state, (u8 *)&val, sizeof(val),
  1257. *ppos, true);
  1258. if (ret <= 0)
  1259. goto write_err;
  1260. filled = 1;
  1261. }
  1262. count -= filled;
  1263. done += filled;
  1264. *ppos += filled;
  1265. buf += filled;
  1266. }
  1267. return done;
  1268. write_err:
  1269. return -EFAULT;
  1270. }
  1271. static void mtty_disable_intx(struct mdev_state *mdev_state)
  1272. {
  1273. if (mdev_state->intx_evtfd) {
  1274. eventfd_ctx_put(mdev_state->intx_evtfd);
  1275. mdev_state->intx_evtfd = NULL;
  1276. mdev_state->intx_mask = false;
  1277. mdev_state->irq_index = -1;
  1278. }
  1279. }
  1280. static void mtty_disable_msi(struct mdev_state *mdev_state)
  1281. {
  1282. if (mdev_state->msi_evtfd) {
  1283. eventfd_ctx_put(mdev_state->msi_evtfd);
  1284. mdev_state->msi_evtfd = NULL;
  1285. mdev_state->irq_index = -1;
  1286. }
  1287. }
  1288. static int mtty_set_irqs(struct mdev_state *mdev_state, uint32_t flags,
  1289. unsigned int index, unsigned int start,
  1290. unsigned int count, void *data)
  1291. {
  1292. int ret = 0;
  1293. mutex_lock(&mdev_state->ops_lock);
  1294. switch (index) {
  1295. case VFIO_PCI_INTX_IRQ_INDEX:
  1296. switch (flags & VFIO_IRQ_SET_ACTION_TYPE_MASK) {
  1297. case VFIO_IRQ_SET_ACTION_MASK:
  1298. if (!is_intx(mdev_state) || start != 0 || count != 1) {
  1299. ret = -EINVAL;
  1300. break;
  1301. }
  1302. if (flags & VFIO_IRQ_SET_DATA_NONE) {
  1303. mdev_state->intx_mask = true;
  1304. } else if (flags & VFIO_IRQ_SET_DATA_BOOL) {
  1305. uint8_t mask = *(uint8_t *)data;
  1306. if (mask)
  1307. mdev_state->intx_mask = true;
  1308. } else if (flags & VFIO_IRQ_SET_DATA_EVENTFD) {
  1309. ret = -ENOTTY; /* No support for mask fd */
  1310. }
  1311. break;
  1312. case VFIO_IRQ_SET_ACTION_UNMASK:
  1313. if (!is_intx(mdev_state) || start != 0 || count != 1) {
  1314. ret = -EINVAL;
  1315. break;
  1316. }
  1317. if (flags & VFIO_IRQ_SET_DATA_NONE) {
  1318. mdev_state->intx_mask = false;
  1319. } else if (flags & VFIO_IRQ_SET_DATA_BOOL) {
  1320. uint8_t mask = *(uint8_t *)data;
  1321. if (mask)
  1322. mdev_state->intx_mask = false;
  1323. } else if (flags & VFIO_IRQ_SET_DATA_EVENTFD) {
  1324. ret = -ENOTTY; /* No support for unmask fd */
  1325. }
  1326. break;
  1327. case VFIO_IRQ_SET_ACTION_TRIGGER:
  1328. if (is_intx(mdev_state) && !count &&
  1329. (flags & VFIO_IRQ_SET_DATA_NONE)) {
  1330. mtty_disable_intx(mdev_state);
  1331. break;
  1332. }
  1333. if (!(is_intx(mdev_state) || is_noirq(mdev_state)) ||
  1334. start != 0 || count != 1) {
  1335. ret = -EINVAL;
  1336. break;
  1337. }
  1338. if (flags & VFIO_IRQ_SET_DATA_EVENTFD) {
  1339. int fd = *(int *)data;
  1340. struct eventfd_ctx *evt;
  1341. mtty_disable_intx(mdev_state);
  1342. if (fd < 0)
  1343. break;
  1344. evt = eventfd_ctx_fdget(fd);
  1345. if (IS_ERR(evt)) {
  1346. ret = PTR_ERR(evt);
  1347. break;
  1348. }
  1349. mdev_state->intx_evtfd = evt;
  1350. mdev_state->irq_index = index;
  1351. break;
  1352. }
  1353. if (!is_intx(mdev_state)) {
  1354. ret = -EINVAL;
  1355. break;
  1356. }
  1357. if (flags & VFIO_IRQ_SET_DATA_NONE) {
  1358. mtty_trigger_interrupt(mdev_state);
  1359. } else if (flags & VFIO_IRQ_SET_DATA_BOOL) {
  1360. uint8_t trigger = *(uint8_t *)data;
  1361. if (trigger)
  1362. mtty_trigger_interrupt(mdev_state);
  1363. }
  1364. break;
  1365. }
  1366. break;
  1367. case VFIO_PCI_MSI_IRQ_INDEX:
  1368. switch (flags & VFIO_IRQ_SET_ACTION_TYPE_MASK) {
  1369. case VFIO_IRQ_SET_ACTION_MASK:
  1370. case VFIO_IRQ_SET_ACTION_UNMASK:
  1371. ret = -ENOTTY;
  1372. break;
  1373. case VFIO_IRQ_SET_ACTION_TRIGGER:
  1374. if (is_msi(mdev_state) && !count &&
  1375. (flags & VFIO_IRQ_SET_DATA_NONE)) {
  1376. mtty_disable_msi(mdev_state);
  1377. break;
  1378. }
  1379. if (!(is_msi(mdev_state) || is_noirq(mdev_state)) ||
  1380. start != 0 || count != 1) {
  1381. ret = -EINVAL;
  1382. break;
  1383. }
  1384. if (flags & VFIO_IRQ_SET_DATA_EVENTFD) {
  1385. int fd = *(int *)data;
  1386. struct eventfd_ctx *evt;
  1387. mtty_disable_msi(mdev_state);
  1388. if (fd < 0)
  1389. break;
  1390. evt = eventfd_ctx_fdget(fd);
  1391. if (IS_ERR(evt)) {
  1392. ret = PTR_ERR(evt);
  1393. break;
  1394. }
  1395. mdev_state->msi_evtfd = evt;
  1396. mdev_state->irq_index = index;
  1397. break;
  1398. }
  1399. if (!is_msi(mdev_state)) {
  1400. ret = -EINVAL;
  1401. break;
  1402. }
  1403. if (flags & VFIO_IRQ_SET_DATA_NONE) {
  1404. mtty_trigger_interrupt(mdev_state);
  1405. } else if (flags & VFIO_IRQ_SET_DATA_BOOL) {
  1406. uint8_t trigger = *(uint8_t *)data;
  1407. if (trigger)
  1408. mtty_trigger_interrupt(mdev_state);
  1409. }
  1410. break;
  1411. }
  1412. break;
  1413. case VFIO_PCI_MSIX_IRQ_INDEX:
  1414. dev_dbg(mdev_state->vdev.dev, "%s: MSIX_IRQ\n", __func__);
  1415. ret = -ENOTTY;
  1416. break;
  1417. case VFIO_PCI_ERR_IRQ_INDEX:
  1418. dev_dbg(mdev_state->vdev.dev, "%s: ERR_IRQ\n", __func__);
  1419. ret = -ENOTTY;
  1420. break;
  1421. case VFIO_PCI_REQ_IRQ_INDEX:
  1422. dev_dbg(mdev_state->vdev.dev, "%s: REQ_IRQ\n", __func__);
  1423. ret = -ENOTTY;
  1424. break;
  1425. }
  1426. mutex_unlock(&mdev_state->ops_lock);
  1427. return ret;
  1428. }
  1429. static int mtty_ioctl_get_region_info(struct vfio_device *vdev,
  1430. struct vfio_region_info *region_info,
  1431. struct vfio_info_cap *caps)
  1432. {
  1433. struct mdev_state *mdev_state =
  1434. container_of(vdev, struct mdev_state, vdev);
  1435. unsigned int size = 0;
  1436. u32 bar_index;
  1437. bar_index = region_info->index;
  1438. if (bar_index >= VFIO_PCI_NUM_REGIONS)
  1439. return -EINVAL;
  1440. mutex_lock(&mdev_state->ops_lock);
  1441. switch (bar_index) {
  1442. case VFIO_PCI_CONFIG_REGION_INDEX:
  1443. size = MTTY_CONFIG_SPACE_SIZE;
  1444. break;
  1445. case VFIO_PCI_BAR0_REGION_INDEX:
  1446. size = MTTY_IO_BAR_SIZE;
  1447. break;
  1448. case VFIO_PCI_BAR1_REGION_INDEX:
  1449. if (mdev_state->nr_ports == 2)
  1450. size = MTTY_IO_BAR_SIZE;
  1451. break;
  1452. default:
  1453. size = 0;
  1454. break;
  1455. }
  1456. mdev_state->region_info[bar_index].size = size;
  1457. mdev_state->region_info[bar_index].vfio_offset =
  1458. MTTY_VFIO_PCI_INDEX_TO_OFFSET(bar_index);
  1459. region_info->size = size;
  1460. region_info->offset = MTTY_VFIO_PCI_INDEX_TO_OFFSET(bar_index);
  1461. region_info->flags = VFIO_REGION_INFO_FLAG_READ |
  1462. VFIO_REGION_INFO_FLAG_WRITE;
  1463. mutex_unlock(&mdev_state->ops_lock);
  1464. return 0;
  1465. }
  1466. static int mtty_get_irq_info(struct vfio_irq_info *irq_info)
  1467. {
  1468. if (irq_info->index != VFIO_PCI_INTX_IRQ_INDEX &&
  1469. irq_info->index != VFIO_PCI_MSI_IRQ_INDEX)
  1470. return -EINVAL;
  1471. irq_info->flags = VFIO_IRQ_INFO_EVENTFD;
  1472. irq_info->count = 1;
  1473. if (irq_info->index == VFIO_PCI_INTX_IRQ_INDEX)
  1474. irq_info->flags |= VFIO_IRQ_INFO_MASKABLE |
  1475. VFIO_IRQ_INFO_AUTOMASKED;
  1476. else
  1477. irq_info->flags |= VFIO_IRQ_INFO_NORESIZE;
  1478. return 0;
  1479. }
  1480. static int mtty_get_device_info(struct vfio_device_info *dev_info)
  1481. {
  1482. dev_info->flags = VFIO_DEVICE_FLAGS_PCI;
  1483. dev_info->num_regions = VFIO_PCI_NUM_REGIONS;
  1484. dev_info->num_irqs = VFIO_PCI_NUM_IRQS;
  1485. return 0;
  1486. }
  1487. static long mtty_ioctl(struct vfio_device *vdev, unsigned int cmd,
  1488. unsigned long arg)
  1489. {
  1490. struct mdev_state *mdev_state =
  1491. container_of(vdev, struct mdev_state, vdev);
  1492. int ret = 0;
  1493. unsigned long minsz;
  1494. switch (cmd) {
  1495. case VFIO_DEVICE_GET_INFO:
  1496. {
  1497. struct vfio_device_info info;
  1498. minsz = offsetofend(struct vfio_device_info, num_irqs);
  1499. if (copy_from_user(&info, (void __user *)arg, minsz))
  1500. return -EFAULT;
  1501. if (info.argsz < minsz)
  1502. return -EINVAL;
  1503. ret = mtty_get_device_info(&info);
  1504. if (ret)
  1505. return ret;
  1506. memcpy(&mdev_state->dev_info, &info, sizeof(info));
  1507. if (copy_to_user((void __user *)arg, &info, minsz))
  1508. return -EFAULT;
  1509. return 0;
  1510. }
  1511. case VFIO_DEVICE_GET_IRQ_INFO:
  1512. {
  1513. struct vfio_irq_info info;
  1514. minsz = offsetofend(struct vfio_irq_info, count);
  1515. if (copy_from_user(&info, (void __user *)arg, minsz))
  1516. return -EFAULT;
  1517. if ((info.argsz < minsz) ||
  1518. (info.index >= mdev_state->dev_info.num_irqs))
  1519. return -EINVAL;
  1520. ret = mtty_get_irq_info(&info);
  1521. if (ret)
  1522. return ret;
  1523. if (copy_to_user((void __user *)arg, &info, minsz))
  1524. return -EFAULT;
  1525. return 0;
  1526. }
  1527. case VFIO_DEVICE_SET_IRQS:
  1528. {
  1529. struct vfio_irq_set hdr;
  1530. u8 *data = NULL, *ptr = NULL;
  1531. size_t data_size = 0;
  1532. minsz = offsetofend(struct vfio_irq_set, count);
  1533. if (copy_from_user(&hdr, (void __user *)arg, minsz))
  1534. return -EFAULT;
  1535. ret = vfio_set_irqs_validate_and_prepare(&hdr,
  1536. mdev_state->dev_info.num_irqs,
  1537. VFIO_PCI_NUM_IRQS,
  1538. &data_size);
  1539. if (ret)
  1540. return ret;
  1541. if (data_size) {
  1542. ptr = data = memdup_user((void __user *)(arg + minsz),
  1543. data_size);
  1544. if (IS_ERR(data))
  1545. return PTR_ERR(data);
  1546. }
  1547. ret = mtty_set_irqs(mdev_state, hdr.flags, hdr.index, hdr.start,
  1548. hdr.count, data);
  1549. kfree(ptr);
  1550. return ret;
  1551. }
  1552. case VFIO_DEVICE_RESET:
  1553. return mtty_reset(mdev_state);
  1554. }
  1555. return -ENOTTY;
  1556. }
  1557. static ssize_t
  1558. sample_mdev_dev_show(struct device *dev, struct device_attribute *attr,
  1559. char *buf)
  1560. {
  1561. return sprintf(buf, "This is MDEV %s\n", dev_name(dev));
  1562. }
  1563. static DEVICE_ATTR_RO(sample_mdev_dev);
  1564. static struct attribute *mdev_dev_attrs[] = {
  1565. &dev_attr_sample_mdev_dev.attr,
  1566. NULL,
  1567. };
  1568. static const struct attribute_group mdev_dev_group = {
  1569. .name = "vendor",
  1570. .attrs = mdev_dev_attrs,
  1571. };
  1572. static const struct attribute_group *mdev_dev_groups[] = {
  1573. &mdev_dev_group,
  1574. NULL,
  1575. };
  1576. static unsigned int mtty_get_available(struct mdev_type *mtype)
  1577. {
  1578. struct mtty_type *type = container_of(mtype, struct mtty_type, type);
  1579. return atomic_read(&mdev_avail_ports) / type->nr_ports;
  1580. }
  1581. static void mtty_close(struct vfio_device *vdev)
  1582. {
  1583. struct mdev_state *mdev_state =
  1584. container_of(vdev, struct mdev_state, vdev);
  1585. mtty_disable_files(mdev_state);
  1586. mtty_disable_intx(mdev_state);
  1587. mtty_disable_msi(mdev_state);
  1588. }
  1589. static const struct vfio_device_ops mtty_dev_ops = {
  1590. .name = "vfio-mtty",
  1591. .init = mtty_init_dev,
  1592. .release = mtty_release_dev,
  1593. .read = mtty_read,
  1594. .write = mtty_write,
  1595. .ioctl = mtty_ioctl,
  1596. .get_region_info_caps = mtty_ioctl_get_region_info,
  1597. .bind_iommufd = vfio_iommufd_emulated_bind,
  1598. .unbind_iommufd = vfio_iommufd_emulated_unbind,
  1599. .attach_ioas = vfio_iommufd_emulated_attach_ioas,
  1600. .detach_ioas = vfio_iommufd_emulated_detach_ioas,
  1601. .close_device = mtty_close,
  1602. };
  1603. static struct mdev_driver mtty_driver = {
  1604. .device_api = VFIO_DEVICE_API_PCI_STRING,
  1605. .driver = {
  1606. .name = "mtty",
  1607. .owner = THIS_MODULE,
  1608. .mod_name = KBUILD_MODNAME,
  1609. .dev_groups = mdev_dev_groups,
  1610. },
  1611. .probe = mtty_probe,
  1612. .remove = mtty_remove,
  1613. .get_available = mtty_get_available,
  1614. };
  1615. static void mtty_device_release(struct device *dev)
  1616. {
  1617. dev_dbg(dev, "mtty: released\n");
  1618. }
  1619. static int __init mtty_dev_init(void)
  1620. {
  1621. int ret = 0;
  1622. pr_info("mtty_dev: %s\n", __func__);
  1623. memset(&mtty_dev, 0, sizeof(mtty_dev));
  1624. idr_init(&mtty_dev.vd_idr);
  1625. ret = alloc_chrdev_region(&mtty_dev.vd_devt, 0, MINORMASK + 1,
  1626. MTTY_NAME);
  1627. if (ret < 0) {
  1628. pr_err("Error: failed to register mtty_dev, err:%d\n", ret);
  1629. return ret;
  1630. }
  1631. cdev_init(&mtty_dev.vd_cdev, &vd_fops);
  1632. cdev_add(&mtty_dev.vd_cdev, mtty_dev.vd_devt, MINORMASK + 1);
  1633. pr_info("major_number:%d\n", MAJOR(mtty_dev.vd_devt));
  1634. ret = mdev_register_driver(&mtty_driver);
  1635. if (ret)
  1636. goto err_cdev;
  1637. mtty_dev.vd_class = class_create(MTTY_CLASS_NAME);
  1638. if (IS_ERR(mtty_dev.vd_class)) {
  1639. pr_err("Error: failed to register mtty_dev class\n");
  1640. ret = PTR_ERR(mtty_dev.vd_class);
  1641. goto err_driver;
  1642. }
  1643. mtty_dev.dev.class = mtty_dev.vd_class;
  1644. mtty_dev.dev.release = mtty_device_release;
  1645. dev_set_name(&mtty_dev.dev, "%s", MTTY_NAME);
  1646. ret = device_register(&mtty_dev.dev);
  1647. if (ret)
  1648. goto err_put;
  1649. ret = mdev_register_parent(&mtty_dev.parent, &mtty_dev.dev,
  1650. &mtty_driver, mtty_mdev_types,
  1651. ARRAY_SIZE(mtty_mdev_types));
  1652. if (ret)
  1653. goto err_device;
  1654. return 0;
  1655. err_device:
  1656. device_del(&mtty_dev.dev);
  1657. err_put:
  1658. put_device(&mtty_dev.dev);
  1659. class_destroy(mtty_dev.vd_class);
  1660. err_driver:
  1661. mdev_unregister_driver(&mtty_driver);
  1662. err_cdev:
  1663. cdev_del(&mtty_dev.vd_cdev);
  1664. unregister_chrdev_region(mtty_dev.vd_devt, MINORMASK + 1);
  1665. return ret;
  1666. }
  1667. static void __exit mtty_dev_exit(void)
  1668. {
  1669. mtty_dev.dev.bus = NULL;
  1670. mdev_unregister_parent(&mtty_dev.parent);
  1671. device_unregister(&mtty_dev.dev);
  1672. idr_destroy(&mtty_dev.vd_idr);
  1673. mdev_unregister_driver(&mtty_driver);
  1674. cdev_del(&mtty_dev.vd_cdev);
  1675. unregister_chrdev_region(mtty_dev.vd_devt, MINORMASK + 1);
  1676. class_destroy(mtty_dev.vd_class);
  1677. mtty_dev.vd_class = NULL;
  1678. pr_info("mtty_dev: Unloaded!\n");
  1679. }
  1680. module_init(mtty_dev_init)
  1681. module_exit(mtty_dev_exit)
  1682. MODULE_LICENSE("GPL v2");
  1683. MODULE_DESCRIPTION("Test driver that simulate serial port over PCI");
  1684. MODULE_VERSION(VERSION_STRING);
  1685. MODULE_AUTHOR(DRIVER_AUTHOR);