blob: fefca3c58d0c1f41eaf2d861c161f333ce865807 [file] [log] [blame]
Nico Huber11136c22023-05-01 12:00:09 +02001/*
2 * This file is part of the flashprog project.
3 *
4 * Copyright (C) 2023 Nico Huber <nico.h@gmx.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 */
16
17#ifndef __PROBING_H__
18#define __PROBING_H__ 1
19
Nico Huberaf9d7382023-05-01 13:33:26 +020020#include <stddef.h>
Nico Huber11136c22023-05-01 12:00:09 +020021#include <stdint.h>
22
23enum id_type {
24 ID_FIXME = 0,
25 ID_NONE,
26
27 ID_82802AB,
28 ID_EDI,
29 ID_EN29LV640B,
30 ID_JEDEC,
31 ID_JEDEC_29GL,
32 ID_OPAQUE,
33 ID_SPI_AT25F,
34 ID_SPI_RDID,
35 ID_SPI_RDID4,
36 ID_SPI_REMS,
37 ID_SPI_RES1,
38 ID_SPI_RES2,
39 ID_SPI_RES3,
40 ID_SPI_SFDP,
41 ID_SPI_ST95,
42 ID_W29EE011,
43};
44
45/*
46 * With 32bit manufacture_id and model_id we can cover IDs up to
47 * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's
48 * Identification code.
49 */
50struct id_info {
Nico Huberaf9d7382023-05-01 13:33:26 +020051 union {
52 uint32_t manufacture;
53 uint32_t id1;
54 };
55 union {
56 uint32_t model;
57 uint32_t id2;
58 };
Nico Huber11136c22023-05-01 12:00:09 +020059 enum id_type type;
60};
61
Nico Huberaf9d7382023-05-01 13:33:26 +020062struct id_info_ext {
63 struct id_info id;
64 void *ext;
65};
66
67struct found_id {
68 struct found_id *next;
69 struct id_info_ext info;
70};
71
72struct flashprog_chip;
73struct master_common;
74
75struct bus_probe {
76 enum id_type type;
77 struct found_id *(*run)(const struct bus_probe *, const struct master_common *);
78 void *arg;
79};
80
81struct bus_probing {
82 unsigned int probe_count;
83 const struct bus_probe *probes;
84 bool (*match)(const struct flashprog_chip *, const struct id_info_ext *);
85};
86
87struct flashprog_flashctx;
88int probe_buses(struct flashprog_flashctx *);
89
Nico Huber11136c22023-05-01 12:00:09 +020090#endif /* !__PROBING_H__ */