Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _TELEMETRY_H
  3#define _TELEMETRY_H
  4
  5/* Telemetry types */
  6#define PMT_TELEM_TELEMETRY	0
  7#define PMT_TELEM_CRASHLOG	1
  8
  9struct telem_endpoint;
 10struct pci_dev;
 11
 12struct telem_header {
 13	u8	access_type;
 14	u16	size;
 15	u32	guid;
 16	u32	base_offset;
 17};
 18
 19struct telem_endpoint_info {
 20	struct pci_dev		*pdev;
 21	struct telem_header	header;
 22};
 23
 24/**
 25 * pmt_telem_get_next_endpoint() - Get next device id for a telemetry endpoint
 26 * @start:  starting devid to look from
 27 *
 28 * This functions can be used in a while loop predicate to retrieve the devid
 29 * of all available telemetry endpoints. Functions pmt_telem_get_next_endpoint()
 30 * and pmt_telem_register_endpoint() can be used inside of the loop to examine
 31 * endpoint info and register to receive a pointer to the endpoint. The pointer
 32 * is then usable in the telemetry read calls to access the telemetry data.
 33 *
 34 * Return:
 35 * * devid       - devid of the next present endpoint from start
 36 * * 0           - when no more endpoints are present after start
 37 */
 38unsigned long pmt_telem_get_next_endpoint(unsigned long start);
 39
 40/**
 41 * pmt_telem_register_endpoint() - Register a telemetry endpoint
 42 * @devid: device id/handle of the telemetry endpoint
 43 *
 44 * Increments the kref usage counter for the endpoint.
 45 *
 46 * Return:
 47 * * endpoint    - On success returns pointer to the telemetry endpoint
 48 * * -ENXIO      - telemetry endpoint not found
 49 */
 50struct telem_endpoint *pmt_telem_register_endpoint(int devid);
 51
 52/**
 53 * pmt_telem_unregister_endpoint() - Unregister a telemetry endpoint
 54 * @ep:   ep structure to populate.
 55 *
 56 * Decrements the kref usage counter for the endpoint.
 57 */
 58void pmt_telem_unregister_endpoint(struct telem_endpoint *ep);
 59
 60/**
 61 * pmt_telem_get_endpoint_info() - Get info for an endpoint from its devid
 62 * @devid:  device id/handle of the telemetry endpoint
 63 * @info:   Endpoint info structure to be populated
 64 *
 65 * Return:
 66 * * 0           - Success
 67 * * -ENXIO      - telemetry endpoint not found for the devid
 68 * * -EINVAL     - @info is NULL
 69 */
 70int pmt_telem_get_endpoint_info(int devid, struct telem_endpoint_info *info);
 71
 72/**
 73 * pmt_telem_find_and_register_endpoint() - Get a telemetry endpoint from
 74 * pci_dev device, guid and pos
 75 * @pdev:   PCI device inside the Intel vsec
 76 * @guid:   GUID of the telemetry space
 77 * @pos:    Instance of the guid
 78 *
 79 * Return:
 80 * * endpoint    - On success returns pointer to the telemetry endpoint
 81 * * -ENXIO      - telemetry endpoint not found
 82 */
 83struct telem_endpoint *pmt_telem_find_and_register_endpoint(struct pci_dev *pcidev,
 84				u32 guid, u16 pos);
 85
 86/**
 87 * pmt_telem_read() - Read qwords from counter sram using sample id
 88 * @ep:     Telemetry endpoint to be read
 89 * @id:     The beginning sample id of the metric(s) to be read
 90 * @data:   Allocated qword buffer
 91 * @count:  Number of qwords requested
 92 *
 93 * Callers must ensure reads are aligned. When the call returns -ENODEV,
 94 * the device has been removed and callers should unregister the telemetry
 95 * endpoint.
 96 *
 97 * Return:
 98 * * 0           - Success
 99 * * -ENODEV     - The device is not present.
100 * * -EINVAL     - The offset is out bounds
101 * * -EPIPE      - The device was removed during the read. Data written
102 *                 but should be considered invalid.
103 */
104int pmt_telem_read(struct telem_endpoint *ep, u32 id, u64 *data, u32 count);
105
106/**
107 * pmt_telem_read32() - Read qwords from counter sram using sample id
108 * @ep:     Telemetry endpoint to be read
109 * @id:     The beginning sample id of the metric(s) to be read
110 * @data:   Allocated dword buffer
111 * @count:  Number of dwords requested
112 *
113 * Callers must ensure reads are aligned. When the call returns -ENODEV,
114 * the device has been removed and callers should unregister the telemetry
115 * endpoint.
116 *
117 * Return:
118 * * 0           - Success
119 * * -ENODEV     - The device is not present.
120 * * -EINVAL     - The offset is out bounds
121 * * -EPIPE      - The device was removed during the read. Data written
122 *                 but should be considered invalid.
123 */
124int pmt_telem_read32(struct telem_endpoint *ep, u32 id, u32 *data, u32 count);
125
126#endif